Quoting AntC <anthony_clay...@clear.net.nz>:

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#

<interactive>:1:6:
    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.
~d

_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to