>>983
[m..n]というのはenumFromToの構文糖衣と考えれば、これはunfoldrを使って
unfoldr f n
f x = x -> if x <= m then Just x else Nothing
と書けるから

foldl (+) 0 (unfoldr f 0)
= {unfoldr}
foldl (+) 0 (0:unfoldr f 1)
= {foldl}
foldl (+) (0+0) (unfoldr f 1)
= {...}
foldl (+) z (n:[])
= {foldl}
z+n

でfoldlのアキュムレータと(x:未評価のy)
という形のリスト分のメモリしか使用しないのでO(1)
他の例でも[m..n]というものをenumFromToつまりunfoldで置き換えてみよう