[英]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.