什么数据 -# UNPACK #- !Size !a !(Set a) !(Set a) 在 Haskell 中意味着什么

Posted

技术标签:

【中文标题】什么数据 -# UNPACK #- !Size !a !(Set a) !(Set a) 在 Haskell 中意味着什么【英文标题】:What data -# UNPACK #- !Size !a !(Set a) !(Set a) means in Haskell什么数据 -# UNPACK #- !Size !a !(Set a) !(Set a) 在 Haskell 中意味着什么 【发布时间】:2019-02-18 16:53:12 【问题描述】:

我不熟悉 Haskell,但想看看它的一些定义。我正在查看Set 并看到了这个:

data Set a    = Bin -# UNPACK #- !Size !a !(Set a) !(Set a)
              | Tip

想知道那条评论在做什么(如果它在做某种代码注入魔法),感叹号的含义是什么以及!Size !a !(Set a) !(Set a)的整体陈述。

【问题讨论】:

【参考方案1】:

这是一个 GHC 编译指示:

UNPACK 向编译器指示它应该将构造函数字段的内容解压缩到构造函数本身,从而移除一个间接级别。

源代码:https://downloads.haskell.org/~ghc/7.0.3/docs/html/users_guide/pragmas.html

这些感叹号的含义是对这些字段强制执行严格。

【讨论】:

更新了我的答案。 @LancePollard 另见***.com/questions/993112/…

以上是关于什么数据 -# UNPACK #- !Size !a !(Set a) !(Set a) 在 Haskell 中意味着什么的主要内容,如果未能解决你的问题,请参考以下文章

font-size:100%有什么作用

[c/c++] size_t是什么

C++数据类型问题,wchar_t和char;size_t

hibernate.jdbc.fetch_size和hibernate.jdbc.batch_size有什么区别?

batch size设置技巧

size_t——为什么支持size_t,何时使用size_t?