https://wiki.haskell.org/Do_notation_considered_harmfulを読んでいて、次の行を読んで驚いた
初心者は、ステートメントの順序が実行の順序を決定すると考えるかもしれません。... ステートメントの順序も評価順序の基準ではありません。
wiki の投稿では、このプロパティを示すいくつかの例を示しました。例は理にかなっていますが、私はまだステートメントが真実であると完全には信じていません。
main = do
putStrLn "foo"
putStrLn "bar"
putStrLn "baz"
3 行は、ステートメントの順序で出てきます。では、ここで何が起こっているのでしょうか。