Kindness of strangers (or strangeness of Kinds)
wagnerdm at seas.upenn.edu
wagnerdm at seas.upenn.edu
Fri Jun 8 03:36:50 CEST 2012
Quoting AntC <anthony_clayden at 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
More information about the Glasgow-haskell-users
mailing list