首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kind降级(与Kind促销相对)

Kind降级(与Kind促销相对)
EN

Stack Overflow用户
提问于 2016-11-22 06:01:04
回答 1查看 309关注 0票数 15

DataKinds扩展将“值”(即构造函数)提升为类型。例如,TrueFalse成为种类Bool的不同类型。

我想做的是相反的,也就是将类型降级为值。一个具有此签名的函数就可以了:

代码语言:javascript
复制
demote :: Proxy (a :: t) -> t

我实际上可以做到这一点,例如对于Bool

代码语言:javascript
复制
class DemoteBool (a :: Bool) where
  demoteBool :: Proxy (a :: Bool) -> Bool

instance DemoteBool True where
  demoteBool _ = True

instance DemoteBool False where
  demoteBool _ = False

然而,我必须为我想要降级回它的值的任何类型编写实例。有没有一种更好的方法来做这件事而不涉及这么多的样板文件?

EN

回答 1

Stack Overflow用户

发布于 2016-11-22 07:38:53

这是singletons的用途之一,尤其是fromSing

代码语言:javascript
复制
ghci> :m +Data.Singletons.Prelude
ghci> :set -XDataKinds
ghci> fromSing (sing :: Sing 'True)
True

它仍然涉及很多样板文件,但是包中已经定义了很多样板文件,我相信它提供了模板Haskell,让您可以更轻松地生成自己的文件(并且代码更少)。

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

https://stackoverflow.com/questions/40730196

复制
相关文章

相似问题

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