Haskell中的`data`和`newtype`之间的区别以及其他一些问题解决了数据和newtype之间的一般差异.我的问题非常具体.如果G是某种类型,是否有任何区别
data T = T !G
和
newtype T = T G?
它们似乎具有相同的严格属性,我不明白为什么编译器有任何理由以不同的方式编译它们,但也许我错过了一些东西.
主要区别在于它的编译方式。所有data声明都会引入内存开销,而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)
Run Code Online (Sandbox Code Playgroud)
输出:
32
16
16
Run Code Online (Sandbox Code Playgroud)
Shachaf 在第一条评论中提到了另一个区别。
| 归档时间: |
|
| 查看次数: |
426 次 |
| 最近记录: |