Kindness of strangers (or strangeness of Kinds)

wagnerdm at wagnerdm at
Fri Jun 8 03:36:50 CEST 2012

Quoting AntC <anthony_clayden at>:

> GHC 7.2.1> :k (->) :: ?? -> ? -> *
> GHC 7.4.1> :k (->) :: * -> * -> *
> At first sight (->) is becoming less polyKinded. Is the eventual aim to be:
> GHC 7.6+> :k (->) :: AnyKind1 -> AnyKind2 -> *

I sort of doubt it. After all, the prototypical thing to do with a  
function is to apply it to something, and Haskell expressions are  
categorized by types of OpenKind -- the new kinds you create with the  
new extension don't classify inhabited types.

It looks to me like "a -> b" and "(->) a b" are just different  
syntactic classes now, not interconvertible with each other:

Prelude GHC.Exts> :set -XMagicHash
Prelude GHC.Exts> :k Int# -> Int#
Int# -> Int# :: *
Prelude GHC.Exts> :k (->) Int# Int#

     Expecting a lifted type, but `Int#' is unlifted
     In a type in a GHCi command: (->) Int# Int#

Perhaps this is a side-effect of the introduction of PolyKinds; from  
the release notes:

"There is a new feature kind polymorphism (-XPolyKinds): Section  
7.8.1, ?Kind polymorphism?. A side-effect of this is that, when the  
extension is not enabled, in certain circumstances kinds are now  
defaulted to * rather than being inferred."

Though I must say it's not 100% clear to me exactly what's changed, or  
whether it was intentional.

More information about the Glasgow-haskell-users mailing list