fumieval
            
          https://github.com/haskell/bytestring/issues/140 削除を含めいろいろな案が出ましたが、現在のメンテナはインスタンスを変えたくないようで…一方GHC側で警告を出す変更が提案されており、採用される可能性が高そうです
        Prelude についても警告するって挙動だったのが改善された、という経緯があるので報告したら直してもらえるかも。main = do putStrLn "a" main
do の中での再帰ってどう扱われるんだろうと気になって調べたらとても分かりやすい解説でした。Monad において (>>) が第二引数を非正格に評価する場合( 少なくとも IO は該当するはず!)はサンクが再帰の数だけ積まれるようなことはない、と。f :: b -> (a,b) みたいな漸化式から系列 [a] を得るのに、 map fst $ iterate (f . snd) e というような式を書いていたのだけど、 unfoldr (Just . f) e で目的のものが得られることが最近判明。random のサンプルコード http://hackage.haskell.org/package/random-1.2.0