让我们说我们有以下几点:
l = map f (map g [1..100])
我们想要:
head l
所以我们得到:
head (map f (map g [1..100]))
现在,我们必须得到第一个元素。map的定义如下所示:
map f l = f (head l) : (map f (tail l))
所以我们得到:
f (head (map g [1..100]))
然后再次申请:
f (g (head [1..100]))
这会导致
f (g 1)
仅仅由于懒惰,没有形成中间列表。
这个分析正确吗?像这样简单的结构:
foldl' ... $ map f1 $ map