gpt4 book ai didi

haskell - 严格的单构造函数单字段数据声明 vs. newtype

转载 作者:行者123 更新时间:2023-12-03 14:46:21 26 4
gpt4 key购买 nike

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 - 严格的单构造函数单字段数据声明 vs. newtype,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21327740/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com