执行定义的IO动作时,和动作someFun <$> (a :: IO ()) <$> (b :: IO ())
的执行是否有序?也就是说,我可以指望那是在执行之前吗?a
b
a
b
对于 GHC,我可以看到 IO 是使用 State 实现的,在这里也看到它是一个 Applicative 实例,但是找不到实际实例声明的来源。通过 State 实现表明不同的 IO 效果需要是顺序的,但不需要定义它们的顺序。
在 GHCi 中玩耍似乎 Appliative 保留了效果顺序,但这是一些普遍的保证,还是 GHC 特定的?我会对细节感兴趣。
import System.Time
import Control.Concurrent
import Data.Traversable
let prec (TOD a b) = b
fmap (map prec) (sequenceA $ replicate 5 (threadDelay 1000 >> getClockTime))
[641934000000,642934000000,643934000000,644934000000,645934000000]
谢谢!