[英]Evaluating List to Weak Head Normal Form
给出以下从1到100的列表:
> let x = [1..100]
我运行sprint x
来观察其未评估的价值。
> :sprint x
x = _
然后,我运行seq
将其评估为Weak Head Normal Form:
> seq x ()
()
但重新运行sprint x
显示( 我认为 )是相同的值。
> :sprint x
x = _
这是为什么?
我认为这个bheklilr的评论应该标记为答案:
x的类型是什么? 如果它是
(Num a, Enum a) => [a]
那么这将无法按预期工作。 试试let x = [1..100] :: [Int
]。 实际上,当您使用更通用的类型打印x时,GHCi将其专门用于Integer进行打印。 这意味着您看到的打印值实际上并不存储在x的thunk中。 使用具体类型可以避免此问题。
使用David Young的附加说明,当启用单态限制时,在7.8之前的GHCi版本上不会出现此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.