繁体   English   中英

GHC能够尾随调用优化IO操作吗?

[英]Is GHC able to tail-call optimize IO actions?

GHC默认会对以下函数执行尾调用优化吗? 关于它的唯一奇怪的事情是它递归地定义了一个IO动作,但我不明白为什么这不是TCO。

import Control.Concurrent.MVar

consume :: MVar a -> [a] -> IO ()
consume _ [] = return ()
consume store (x:xs) = do putMVar store x
                          consume store xs

因为你的代码相当于

consume store (x:xs) = putMVar store >> consume store xs

呼叫实际上并不发生在尾部位置。 但是如果你运行ghc -O并打开优化器, -ddump-simpl选项将显示GHC中间代码的输出,它确实优化为尾递归函数,它将编译成循环。

所以答案是GHC默认不会对此进行优化; 你需要-O选项。

(使用GHC版本6.10.1完成的实验。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM