I was just playing around and noticed that the kind of the function arrow in GHC is (?? -> ? -> *) when I (naively) expected it to be (* -> * -> *). After looking at (http://hackage.haskell.org/packages/archive/ghc/6.10.2/doc/html/Type.html#5) I see that the kind of (->) means that the parameter type cannot be an unboxed tuple, whilst the result type can be anything. Why is this?
After reading this documentation I would expect the kind (? -> ? -> *).

I'm now wondering if the kind of (->) could cause problems if the following style of declaration is requried:

> type FunArg a b = (a -> b, a)

*Main> :k FunArg
FunArg :: * -> * -> *

By using type variables, whose default kind is *, the function type is fixed to use only boxed types. But if one wanted to allow unboxed type parameters the kind would be wrong, and an explicit kind signature of # or ? can't be given as they are not part of Haskell's source language.

I guess my question is why the (?? -> ? -> *) kind on (->) and what to do if synonyms or data types over (->) are required such as the example just stated. I'm just curious.

Thanks,
Dominic
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to