Why does (Ord a Num b) => a -> b -> a result in (Ord a, Num a) -> a

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?