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?
(->) 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
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.