Memory Leak (Hugs Only)

ちょっとしたテストデータの生成にrunhugsを使おうとして詰まった。
多分CAF leak*1なのだろうけれど、Hugs(runhugs)では「長い時間」データの出力をつづけることはできないのだろうか?

例 1

main = putStr $ concat $ repeat "aaa "

ERROR - Garbage collection fails to reclaim sufficient space

で止まる。けれども、このプログラムは同じことの繰り返しなので、回避策がある。

main = putStr "aaa " >> main

例 2

main = mapM_ (putStr . (++ " ") . show)  [0..]

こっちになるとわからない。実際の用途はこれに近い(数列を出力し続ける)。

実用性の無い回避策しか思いつかなかった。

r = unsafePerformIO (newIORef 0)

main 
  = do  x <- readIORef r
        writeIORef r (x + 1)
        putStr $ show x ++ " "
        main      

*1:mainがputChar 'a' >> putChar 'a' ... というものに評価されてだんだん大きくなる