Если я включу MagicHash
, то у меня есть неснятые значения, такие как 42#
с типом Int#
.
Теперь, если Type
- это тип типов со значениями тогда тип Int#
должен быть Type
, но это не потому, что Type
является синонимом TYPE 'LiftedRep
, тогда как тип Int#
равен TYPE 'IntRep
.Мы можем легко подтвердить это в ghci
,
Prelude> :set -XMagicHash -XKindSignatures
Prelude> :m +Data.Kind GHC.Prim
Prelude Data.Kind GHC.Prim> :k (Int# :: Type)
<interactive>:1:2: error:
• Expecting a lifted type, but ‘Int#’ is unlifted
• In the type ‘(Int# :: Type)’
Так что это просто тот случай, когда мы не рассматриваем магические литералы, такие как 42#
, как значения?