在我对Haskell的研究中,我看到了在类型声明中使用的符号!
。参见示例:
data Foo = MkFoo
{ _bar :: !Bar
, ...
}
我的问题是:为什么要使用它,没有它的声明有什么区别?
在关联构造函数的应用程序站点上,用感叹号标记的字段是严格的。例如,您的数据声明与没有!
的情况完全相同,但在代码使用MkFoo
的任何地方都要编写以下内容:
bar `seq` MkFoo { _bar = bar }
全部细节见报告。