我知道我可以将 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
关于haskell - 只有一个值可提升到种类级别的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35682969/