Difference between `data` and `newtype` in Haskell和其他几个问题解决了数据和新类型之间的一般差异。我的问题是一个非常具体的问题。如果G
是某种类型,两者之间是否有任何区别data T = T !G
和newtype T = T G
?
它们似乎具有相同的严格性属性,而且我不明白为什么编译器没有任何理由对它们进行不同的编译,但是也许我缺少了一些东西。
最佳答案
主要区别在于它将如何进行编译。所有data
声明introduce memory overhead,而newtype
不。
这是内存占用量测量库的输出。
import GHC.DataSize
data A = A !Int
newtype B = B Int
main = do
print =<< (recursiveSize $! A 1)
print =<< (recursiveSize $! B 1)
print =<< (recursiveSize $! 1)
输出:
32
16
16
Shachaf在第一条评论中提到了另一个区别。
关于haskell - 严格的单构造函数单字段数据声明与newtype,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21327740/