11

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

4

2 に答える 2

3

データ コンストラクターで ! 型が構築されるときに引数が評価されることを示します。これにより、関数の評価が強制され、アプリケーションのスペース要件を制御するのに役立ちます。

高性能な Haskellのスライドでは、これについて詳しく説明しています。

于 2013-06-27T07:17:39.183 に答える