Haskell - Является ли порядок эффектов детерминированным в случае Applicative?

При выполнении действия ввода-вывода, определенного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]

Спасибо!

Ответы на вопрос(3)

Ваш ответ на вопрос