Control.Parallel.Strategiesのソースコード(http://hackage.haskell.org/packages/archive/parallel/3.1.0.1/doc/html/src/Control-Parallel-Strategies.html#Eval)には、タイプEvalが含まれています。定義:
data Eval a = Done a
次のモナドインスタンスがあります。
instance Monad Eval where
return x = Done x
Done x >>= k = k x -- Note: pattern 'Done x' makes '>>=' strict
バインドの定義のコメントに注意してください。なぜこのコメントは本当ですか?厳密性についての私の理解は、関数はその引数について「何かを知っている」必要がある場合にのみ厳密であるということです。ここで、bindはkをxに適用するだけなので、xについて何も知る必要はないように見えます(私には)。さらに、コメントは、関数が定義される前に、パターンマッチで厳密性が「誘導」されることを示唆しています。バインドが厳密である理由を誰かが理解するのを手伝ってもらえますか?
また、Evalは単なるアイデンティティモナドのようであり、bindの定義にコメントがあるとすると、bindはほとんどすべてのMonadに対して厳密になります。これは本当ですか?