首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可提升到只有一个值的类别级别的数据类型

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

Stack Overflow用户
提问于 2016-02-28 13:14:07
回答 1查看 150关注 0票数 3

我知道我可以将Bool提升到类似这样的级别,Bool可能是TrueFalse

代码语言:javascript
复制
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeFamilies #-}

type family TF t :: Bool
type instance TF Int = True
type instance TF Bool = False

相反,我想推广(),它当然只有一个值()。但这似乎不起作用:

代码语言:javascript
复制
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeFamilies #-}

type family TF t :: ()
type instance TF Int = ()
type instance TF Bool = ()

我想我可以只使用BoolTrue,但是有一种有价值的类型可以提升到同类级别吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-28 13:20:53

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

代码语言:javascript
复制
type family ToNull t :: ()
type instance ToNull Int = '()
type instance ToNull Bool = '()

而且,在类型级别上,TrueFalse实际上是'True'False的缩写。

问题是,范围中有四个()

  1. 普通型()*
  2. 1的唯一构造函数,也是()
  3. ()从1
  4. '() ()类型从2升级而来,默认情况下该类型同义词为()

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

您可以查看GHC的用户指南以获得详细信息:7.9.数据类型提升

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35682969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档