ベストアンサー1
さらに簡単な答えは次のとおりです。モナドは、モナドコンテキストが によって折りたたまれたときに「計算」するものですjoin :: m (m a) -> m a
(>>=
は として定義できることを思い出してくださいx >>= y = join (fmap y x)
)。これは、モナドが連続した計算チェーンを通じてコンテキストを運ぶ方法です。一連の計算の各ポイントで、前の呼び出しからのコンテキストが次の呼び出しで折りたたまれるためです。
フリー モナドはすべてのモナド法則を満たしますが、折りたたみ (つまり計算) は行いません。ネストされた一連のコンテキストを構築するだけです。このようなフリー モナド値を作成したユーザーは、ネストされたコンテキストで何らかの処理を実行する責任があるため、このような構成の意味は、モナド値が作成された後まで延期できます。