3

我知道我可以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 = ()

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

4

1 回答 1

6

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

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

并且实际上是类型级别的和True的简写。False'True'False

问题是范围内有四个()

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

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

您可以查看 GHC 的用户指南了解详细信息:7.9。数据类型提升

于 2016-02-28T13:20:53.870 回答