只有一个值可提升到种类级别的数据类型

Data type that's promotable to the kind level with only one value

我知道我可以将 Bool 提升到这样的级别,其中 Bool 可能是 TrueFalse:

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeFamilies #-}

type family TF t :: Bool
type instance TF Int = True
type instance TF Bool = False

我想转而推广 (),它当然只有一个值 ()。但这似乎不起作用:

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeFamilies #-}

type family TF t :: ()
type instance TF Int = ()
type instance TF Bool = ()

我想我可以只使用 BoolTrue,但是有没有可以提升到 kind 级别的单值类型?

尝试在类型级别使用 '() 而不是 ()

type family ToNull t :: ()
type instance ToNull Int = '()
type instance ToNull Bool = '()

此外 TrueFalse 实际上是 'True'False 在类型级别的缩写。

问题是范围内有四个 ()

  1. 普通型()*
  2. 1 的唯一构造函数也是 ()
  3. 从 1
  4. 晋升的种类 ()
  5. 类型 '() 的类型 () 从 2 提升而来,默认情况下具有类型同义词 ()

没有有时可选的单引号,1 和 4 是不明确的。

详情可以查看GHC的使用指南:7.9. Datatype promotion