I'm fairly new to learning haskell, so I don't really understand the typing system when it comes to constraints. There's this weird => symbol that doesn't make sense to me. Is it actually just syntax? Or is it a type constructor? I'm not sure. Below are my thoughts about it. Can someone clarify what exactly => means in haskell?

In haskell, (->) is a type constructor, with kind * -> * -> *. This is nice, because it makes it clear why, for example, Double -> Bool has kind *. But then I wondered about types like (Integral a) => a -> a. Clearly, this has kind *, and a -> a has kind * (I think). Since Integral has kind * -> Constraint, Integral a must have kind Constraint. Then, I conclude that (=>) has kind Constraint -> * -> *. However, when I type :k (=>) in GHCi, I get an error ("parse error on input =>")! This seems to indicate that (=>) is not a type constructor. Then what is it?

GHCi also tells me that (Show List, Read List) has kind Constraint, but that (,) has kind * -> * -> *, which makes me very confused. Does (,) have two definitions? Are constraints some magical hocus-pocus that I just don't understand?

Any help is greatly appreciated.


The => is just there as a delimiter between context and type when you write a type signature. They aren't even saved after compilation. You can see it here: http://www.haskell.org/onlinereport/syntax-iso.html

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.