我知道我可以将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,但是有一种有价值的类型可以提升到同类级别吗?
发布于 2016-02-28 13:20:53
尝试在类型级别使用'()而不是():
type family ToNull t :: ()
type instance ToNull Int = '()
type instance ToNull Bool = '()而且,在类型级别上,True和False实际上是'True和'False的缩写。
问题是,范围中有四个():
()类*()。()从1'() ()类型从2升级而来,默认情况下该类型同义词为()。没有有时可选的单引号,1和4是不明确的。
您可以查看GHC的用户指南以获得详细信息:7.9.数据类型提升。
https://stackoverflow.com/questions/35682969
复制相似问题