2つの機能が与えられたとしましょう:
f :: [a] -> b
g :: [a] -> c
これと同等の関数を書きたい:
h x = (f x, g x)
しかし、それを行うと、大きなリストの場合、必然的にメモリが不足します。
簡単な例は次のとおりです。
x = [1..100000000::Int]
main = print $ (sum x, product x)
xリストがガベージコレクションされずにメモリに保存されているため、これが当てはまることを理解しています。代わりに、「並行」でf作業gしたほうがよいでしょう。x
fandを変更できずg、別のコピーを作成したくないx場合 (作成に費用がかかると仮定) 、メモリ不足の問題に遭遇することなくxどのように書き込むことができますか?h