Haskell - Является ли порядок эффектов детерминированным в случае Applicative?
При выполнении действия ввода-вывода, определенногоsomeFun (a :: IO ()) (b :: IO ())
, является выполнениеa
а такжеb
действия заказаны? То есть могу ли я рассчитывать на этоa
выполняется раньшеb
является?
Для GHC я вижу, что IO реализован с использованием State, а также вижуВот что это Аппликативный пример, но можетнайти источник фактического объявления экземпляра. Реализация через 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]
Спасибо!