在Haskell性能资源 wiki一节中,未作进一步解释的建议提供给
return $! ...),除非你绝对需要他们懒惰。为什么这么做是件好事?...-expression (Whnf-)究竟是什么时候被强制的?
给出了“左同一性”的单律和定义。
f $! x = x `seq` f x我可以重写(用do-notation`):
do x' <- return $! x
f x'至
do x' <- x `seq` return x
f x'但我似乎不能
do f $! xPS:如果BangPatterns-extension可用,则为
do !x' <- return x
f x'在语义上与上面给出的第一个do-expression相同吗?
发布于 2011-04-10 10:58:40
有一个你无法从
do x' <- x `seq` return x
f x'至
f $! x这是因为他们不一样。只需展开do表示法:
(x `seq` return x) >>= (\ x' -> f x')只有在seq的第一个参数是严格的情况下,才会对(>>=)进行评估。这不一定是真的。
发布于 2011-04-10 13:27:21
对于IO,还有一个有用的Control.Exception.evaluate
在执行结果IO操作时,强制将其参数求值为弱头范式。它可以用于对其他IO操作排序计算;它的语义由
evaluate :: a -> IO a
evaluate x = (return $! x) >>= returnhttps://stackoverflow.com/questions/5610945
复制相似问题