假设我被赋予了两个功能:
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而不遇到内存不足的问题?