相关疑难解决方法(0)

Haskell中`data`和`newtype`之间的区别

我写这个有什么区别?

data Book = Book Int Int
Run Code Online (Sandbox Code Playgroud)

newtype Book = Book (Int, Int) -- "Book Int Int" is syntactically invalid
Run Code Online (Sandbox Code Playgroud)

haskell types type-systems newtype

179
推荐指数
1
解决办法
2万
查看次数

为什么Haskell中存在"数据"和"新类型"?

似乎newtype定义只是data遵循某些限制的定义(例如,只有一个构造函数),并且由于这些限制,运行时系统可以newtype更有效地处理s.并且未定义值的模式匹配处理略有不同.

但是假设Haskell只知道data定义,没有newtypes:编译器不能自己发现给定的数据定义是否遵守这些限制,并自动更有效地对待它?

我确定我错过了什么,必须有更深层次的理由.

haskell types type-systems language-design

146
推荐指数
4
解决办法
3万
查看次数

带有严格注释的`newtype`和`data`之间的区别

这段代码怎么样?

data D = D { _d :: ![P] } -- Note the strictness annotation!
Run Code Online (Sandbox Code Playgroud)

与此相比

newtype D = D { _d :: [P] }
Run Code Online (Sandbox Code Playgroud)

对相关问题回答是:

数据和newtype之间的主要区别在于,数据是数据构造函数是惰性的,而newtype是严格的

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

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

haskell lazy-evaluation newtype

4
推荐指数
1
解决办法
102
查看次数