只有一个值可提升到种类级别的数据类型
Data type that's promotable to the kind level with only one value
我知道我可以将 Bool
提升到这样的级别,其中 Bool
可能是 True
或 False
:
{-# 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 = ()
我想我可以只使用 Bool
和 True
,但是有没有可以提升到 kind 级别的单值类型?
尝试在类型级别使用 '()
而不是 ()
:
type family ToNull t :: ()
type instance ToNull Int = '()
type instance ToNull Bool = '()
此外 True
和 False
实际上是 'True
和 'False
在类型级别的缩写。
问题是范围内有四个 ()
:
- 普通型
()
类*
- 1 的唯一构造函数也是
()
- 从 1
晋升的种类 ()
- 类型
'()
的类型 ()
从 2 提升而来,默认情况下具有类型同义词 ()
没有有时可选的单引号,1 和 4 是不明确的。
详情可以查看GHC的使用指南:7.9. Datatype promotion
我知道我可以将 Bool
提升到这样的级别,其中 Bool
可能是 True
或 False
:
{-# 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 = ()
我想我可以只使用 Bool
和 True
,但是有没有可以提升到 kind 级别的单值类型?
尝试在类型级别使用 '()
而不是 ()
:
type family ToNull t :: ()
type instance ToNull Int = '()
type instance ToNull Bool = '()
此外 True
和 False
实际上是 'True
和 'False
在类型级别的缩写。
问题是范围内有四个 ()
:
- 普通型
()
类*
- 1 的唯一构造函数也是
()
- 从 1 晋升的种类
- 类型
'()
的类型()
从 2 提升而来,默认情况下具有类型同义词()
()
没有有时可选的单引号,1 和 4 是不明确的。
详情可以查看GHC的使用指南:7.9. Datatype promotion