首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“`newtype`”和“`data`”之间的区别及其严格的注释

“`newtype`”和“`data`”之间的区别及其严格的注释
EN

Stack Overflow用户
提问于 2018-11-20 10:42:48
回答 1查看 280关注 0票数 4

这段代码是如何

代码语言:javascript
复制
data D = D { _d :: ![P] } -- Note the strictness annotation!

与此相比

代码语言:javascript
复制
newtype D = D { _d :: [P] }

一个answer to a related question说:

数据和新类型的主要区别在于,对于数据,数据构造函数是懒惰的,而新类型是严格的。

data版本有严格的注释时,这种差异是如何工作的?

(这个问题是基于我偶然发现的真实代码)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-20 10:56:10

例如,

代码语言:javascript
复制
case undefined of
   D d -> "hello"

将错误输出到data类型(严格或不严格),但对于新类型将计算为"hello"

这是因为,在运行时,应用newtype构造函数或模式匹配不对应于任何操作。甚至不强制我们case的值。

相反,data构造函数上的模式匹配总是强制我们case所依赖的值。

我认为这是严格的datanewtype之间唯一的运行时区别。存在一些静态差异,例如一些只影响newtypeCoercible等的GHC扩展,但在运行时这两种类型是同构的(但模式匹配的操作方式不同,如上面所示)。

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

https://stackoverflow.com/questions/53391237

复制
相关文章

相似问题

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