从1到100给出以下列表:
> let x = [1..100]
我运行sprint x
来观察其未评估的价值。
> :sprint x
x = _
然后,我运行seq
将其评估为弱头正常形式:
> seq x ()
()
但重新运行sprint x
节目(我认为)的价值是相同的。
> :sprint x
x = _
为什么?
答案 0 :(得分:1)
我认为这个bheklilr的评论应该标记为答案:
x的类型是什么?如果它是
(Num a, Enum a) => [a]
,那么这将无法按预期工作。试试let x = [1..100] :: [Int
]。实际上,当您使用更通用的类型打印x时,GHCi将其专门用于Integer进行打印。这意味着您看到的打印值实际上并未存储在x&th; thunk中。使用具体类型可以避免这个问题。
David Young补充说明,当启用单态限制时,这个问题不会发生在早于7.8的GHCi版本上。