gpt4 book ai didi

haskell - 数据构造函数中 !( ) 是什么意思?

转载 作者:行者123 更新时间:2023-12-02 04:52:01 25 4
gpt4 key购买 nike

我正在阅读Data.Map的源代码,发现data Map k a的数据构造函数中使用了!()。

data Map k a  = Tip 
| Bin {-# UNPACK #-} !Size !k a !(Map k a) !(Map k a)

我发现 !( ) 不会影响模式与数据的匹配方式。在mapWithKey函数中,模式匹配仍然是5件事。所以我不认为它是一个运营商。

mapWithKey f (Bin sx kx x l r) 

经过谷歌搜索,我发现!( )可能与用于延迟评估的-XBangPatterns有关。我对吗 ?还是有其他目的?

最佳答案

数据类型声明中的

! 用于指示严格性。如果我们search for it on Hoogle ,我们看到一个指向 keyword ! 的链接,这解释了该行为。报告defines确切的行为。

data Foo = Foo ... !T ... 中,构造函数 Foo 强制其参数,即 Foo ... x ... = x `seq` RealFoo ... x ...。其中 RealFoo 是在没有 ! 的情况下获得的构造函数。

{-# UNPACK #-} 是一个 GHC 扩展,意味着 Size(即 Int)未装箱存储,直接作为一部分数据类型。

关于haskell - 数据构造函数中 !( ) 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17336774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com