我正在阅读Data.Map的源代码,我发现!()用于数据构造函数中data Map k a.
data Map k a = Tip
| Bin {-# UNPACK #-} !Size !k a !(Map k a) !(Map k a)
Run Code Online (Sandbox Code Playgroud)
我发现这!( )不会影响patten如何匹配数据.在mapWithKey的功能中,模式匹配仍然适用于5件事.所以我不认为它是一个运营商.
mapWithKey f (Bin sx kx x l r)
Run Code Online (Sandbox Code Playgroud)
谷歌后,我发现!( )可能与-XBangPatterns懒惰评估有关.我对吗 ?还是出于其他目的?
sha*_*haf 20
!在数据类型声明中用于表示严格性.如果我们在Hoogle上搜索它,我们会看到关键字的链接!,这解释了这种行为.报告定义了确切的行为.
在data Foo = Foo ... !T ...,构造函数Foo强制其参数,即Foo ... x ... = x `seq` RealFoo ... x ....RealFoo你没有得到的构造函数在哪里!.
{-# UNPACK #-}是一个GHC扩展,意味着Size(ie Int)直接存储为未装箱,直接作为数据类型的一部分.
| 归档时间: |
|
| 查看次数: |
434 次 |
| 最近记录: |