【发布时间】: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)的整体陈述。
【问题讨论】:
我不熟悉 Haskell,但想看看它的一些定义。我正在查看Set 并看到了这个:
data Set a = Bin {-# UNPACK #-} !Size !a !(Set a) !(Set a)
| Tip
想知道那条评论在做什么(如果它在做某种代码注入魔法),感叹号的含义是什么以及!Size !a !(Set a) !(Set a)的整体陈述。
【问题讨论】:
这是一个 GHC 编译指示:
UNPACK 向编译器指示它应该将构造函数字段的内容解压缩到构造函数本身,从而移除一个间接级别。
源代码:https://downloads.haskell.org/~ghc/7.0.3/docs/html/users_guide/pragmas.html
这些感叹号的含义是对这些字段强制执行严格。
【讨论】: