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
私は正しいですか?それとも他の目的ですか?