我无法解释以下行为:
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 为其弱头范式(WHNF)?
我在阅读Simon Marlow 的 Parallel and Concurrent Programming In Haskell时意外发现了这种行为。