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'只能在类型级别使用?
- 提升的类型中没有值。
- 是的,
Type
是唯一一种包含术语的类型。
- 是的,
'Zero
和 'Succ
只能在类型级别使用。但我认为这不是一个有趣的观察;也确实如此,比方说,Int
只能在类型级别使用。
{-# 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'只能在类型级别使用?
- 提升的类型中没有值。
- 是的,
Type
是唯一一种包含术语的类型。 - 是的,
'Zero
和'Succ
只能在类型级别使用。但我认为这不是一个有趣的观察;也确实如此,比方说,Int
只能在类型级别使用。