【发布时间】:2018-07-05 09:28:34
【问题描述】:
GHC 手册说明了 GHCI 中的一元绑定:
这两种绑定的另一个重要区别是 monadic 绑定 (p
(来自here)
但我可以在 GHCI 中做到这一点:
λ: x <- return $ error ":("
λ: :sprint x
x = _
这似乎表明一元绑定并不严格。我错过了什么?
【问题讨论】:
-
x <- error ":("和x <- return $ error ":("是不同的表达方式 -
我本来打算建议尝试
let e = return $ error ":("; p <- e; :sprint e,但事实证明,即使评估了IO动作也会得到sprinted 为_。无赖!但是请尝试p <- Debug.Trace.trace "yep, got evaluated" $ return $ error ":("以证明该操作(如果不是其返回值)确实按承诺进行了评估。