在计算多态表达式后理解 'sprint'

Understanding 'sprint' after evaluating a polymorphic expression

鉴于:

λ: let x = 1 + 2

I 运行 sprint 打印其值:

λ: :sprint x
x = _

不出所料,未计算。

但是,在评估 x 之后:

λ: x
3

sprint 仍然输出 _,即未计算:

λ: :sprint x
x = _

这是为什么?

因为x是多态的

比较:

Prelude> let x = 1 + 2 :: Int
Prelude> :sprint x
x = _
Prelude> x
3
Prelude> :sprint x
x = 3
Prelude>

x 是多态时,GHCI 无法将 thunk 替换为特定值,因为您稍后可能会将其评估为不同的类型。