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

Cli*_*ton 3 haskell type-families data-kinds

我知道我可以提升Bool到这样的水平,Bool可能在哪里TrueFalse:

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

type family TF t :: Bool
type instance TF Int = True
type instance TF Bool = False
Run Code Online (Sandbox Code Playgroud)

我想要推广(),当然只有一个价值().但这似乎不起作用:

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

type family TF t :: ()
type instance TF Int = ()
type instance TF Bool = ()
Run Code Online (Sandbox Code Playgroud)

我想我可以使用BoolTrue,但是有一种值得提升的类型吗?

zak*_*aps 6

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

type family ToNull t :: ()
type instance ToNull Int = '()
type instance ToNull Bool = '()
Run Code Online (Sandbox Code Playgroud)

此外True,False实际上是'True'False类型级别的缩写.

问题是()范围有四个:

  1. 普通()的那种*
  2. 1的唯一构造函数也是 ()
  3. ()从1提升的那种
  4. 类型'()()从2促进,其具有类型同义词()默认

如果没有有时可选的单引号,则1和4是不明确的.

您可以查看GHC的用户指南了解详情:7.9.数据类型推广

  • 甚至还有第五个`()`用于额外的混淆:空约束. (3认同)