kazu-yamamotoさんのコメントいただいて、モナドの実行順序関連の振る舞いについて考えてみました。 bind (>>=) が、右辺を実行する前に左辺を実行し終えるかについて。 リストもモナドなことは前回にも述べましたが、リストのモナドインスタンスの実装は以下のようになっています。 instance Monad where m >>= f = concatMap f m return x = [x] fail s = リストモナドのbindでは、concatMapを使っているので、右辺の実行は左辺の実行終了を待たないことになります。リストのモナド性をつかうと、結構面白いことができて、 [1, 2, 3] >>= (replicate 2) [1,1,2,2,3,3] なんて事が起きたりします。それはさておき、無限リストを利用して、bindを試してみました。 [1..] >>= (fi