独自のストリーミング コードを作成するにはどうすればよいでしょうか。私は約 1,000,000,000 組のウォー デッキをランダムに生成していました。それらをフォールドに遅延ストリーミングしたかったのですが、スペース リークが発生しました。コードの関連セクションは次のとおりです。
main = do
games <- replicateM 1000000000 $ deal <$> sDeck --Would be a trillion, but Int only goes so high
let res = experiment Ace games --experiment is a foldl'
print res --res is tiny
-O2 を付けて実行すると、最初にコンピュータがフリーズし始め、次にプログラムが停止し、コンピュータが復活します (そして、Google Chrome には、すべてのリソースを使い果たしたことを私に怒鳴るのに必要なリソースがあります)。
注: unsafeInterleaveIO を試しましたが、うまくいきませんでした。