馬鹿とか書いて悪かったよ。しかし…

newtype Stream a = Stream (IO (Maybe (a, Stream a)))

これって意味あるんか?
IOを別の型として再定義しただけでしょ?駆動するのに専用の関数が必要ならあんまり意味が無い希ガス
せめてmonadにしてみるとか。あ,そしたら単にIO monadの(ほぼ)再定義になるだけか。