Eff
- синхронный эффект монады. Он используется для упорядочивания внешнего кода JavaScript - таких, как генерация случайных чисел, чтение и запись изменяемых значений, запись на консоль и исключение и перехват исключений.
Aff
- монограмма асинхронного эффекта. Он может обрабатывать и настраивать эффективный асинхронный код, например, запросы AJAX, тайм-ауты и сетевое и файловое ввода-вывода. Он также может выполнять синхронные эффекты, используя liftEff
. И он также обеспечивает хороший механизм для обработки ошибок.
можно конвертировать из Eff
в Aff
используя liftEff
(все, что не приостановку является экземпляром то, которое позволило сделать паузу), но в другом направлении не представляется возможным в целом. Aff
действия могут выполняться в контексте Eff
путем предоставления обратного вызова.
Хаскелла IO
похож на обоих, но ближе к Aff
чем Eff
в том, что IO
действия могут представлять асинхронные вещи (см threadDelay
, например).
Я думаю, что стоит упомянуть 'launchAff', который можно использовать для синхронного запуска вычисления' Aff', если это необходимо. Он определен в 'Control.Monad.Aff'. У преследования будет лучшее описание того, что он делает и как это работает, чем я могу вписаться в комментарий. –