Thank you for that KripkesBeard. I see now that I was so caught-up in the details of types and the addition of type constraints that I missed the basics of currying.
I think I’m also getting that when you take
kessel :: (Ord a, Num b) => a -> b -> a; kessel = undefined
and you call it with
kessel "ca"
you get
kessel "ca" :: Num b => b -> [Char]
Where the Ord
constraint is gone not only because the function has already been applied to a
but also because the remaining param is of type Num
and Num
always includes Ord
, so Num a
implies Ord
. Am I getting that right?