以下是
evaluate
文档的摘录:
在这里,我们提供了evaluate
的一部分文档:
Control.Exception.Base.evaluate :: a -> IO a
evaluate x
is not the same as
return $! x
A correct definition is
evaluate x = (return $! x) >>= return
(source)
这两个定义似乎有相同的意思。它们之间有什么区别?
seq
操作,return $! x
具有最外层的seq
,而(return $! x) >>= return
则具有最外层的(>>=)
。 - Daniel FischerReader
)的行为方式也是如此。我不同意 Daniel Fischer 的观点(我之前从其他人那里听过),因为“如果运行时完全相同的行为”并不是一个明确定义的概念。 - ehird\
seq`的优先级低于
>>=-
>>=`怎么可能是最外层的? - mucahoseq
参数的两个表达式。在seq (return $! x)
中,return $! x
具有最外层的seq
(来自$!
),而在seq ((return $! x) >>= return)
中,(return $! x) >>= return
具有最外层的>>=
。 - Daniel Fischer