DataKinds 提升类型的居民

Inhabitants of promoted type by DataKinds

{-# LANGUAGE DataKinds #-}
data Nat = Zero | Succ Nat

DataKinds 根据 GHC User Guide,将数据类型提升为种类,将构造函数提升为类型构造函数。

Nat :: Type
'Zero :: Nat
'Succ :: Nat -> Nat

Q1。类型是一组值,但我如何获得提升类型的术语级值?

例如,在 ghci 中,bottom 甚至不是 `'Zero'.

类型的居民
λ: undefined :: 'Zero

<interactive>:3:14: error:
    • Expected a type, but ‘'Zero’ has kind ‘Nat’
    • In an expression type signature: 'Zero
      In the expression: undefined :: 'Zero
      In an equation for ‘it’: it = undefined :: 'Zero

Q2。类型类型 Type 是术语级别值可以存在的唯一类型吗?

Q3。如果提升类型中没有居民,这是否也意味着提升类型`'Zero'''Succ'只能在类型级别使用?

  1. 提升的类型中没有值。
  2. 是的,Type 是唯一一种包含术语的类型。
  3. 是的,'Zero'Succ 只能在类型级别使用。但我认为这不是一个有趣的观察;也确实如此,比方说,Int 只能在类型级别使用。