【发布时间】:2015-09-03 05:27:02
【问题描述】:
我无法解释以下行为:
Prelude> let x = 1 + 2
Prelude> let y = (x,x)
Prelude> :sprint y
Prelude> y = _
现在当我为 x 指定类型时:
Prelude> let x = 1 + 2 ::Int
Prelude> let y = (x,x)
Prelude> :sprint y
Prelude> y = (_,_)
为什么 x 的类型规范会强制 y 为其weak head normal form (WHNF)?
我在阅读Simon Marlow's Parallel and Concurrent Programming In Haskell时无意中发现了这种行为。
【问题讨论】:
-
另见sprint for polymorphic values,虽然我觉得令人费解的是
y的元组构造函数即使在单态情况下也是可见的,所以它可能不是重复的。
标签: haskell lazy-evaluation weak-head-normal-form