考虑程序:
l = [0..10]
l' = map (+1) [0..10]
使用 GHCi 运行它,然后输入:sprint l
and:sprint l'
将显示两个列表都未评估。但是,在运行length l
然后length l'
再次使用之后sprint
:
l = [0,1,2,3,4,5,6,7,8,9,10]
和
l' = [_,_,_,_,_,_,_,_,_,_,_]
我已经进行了类似的实验并尝试将变量绑定到 GHCi 中的列表let
,但是只有在l
(如上在程序顶层中定义)的情况下,列表总是被完全评估。
这些行为都指向优化功能,但是我想知道是否有更详尽的答案(策略)“幕后”。