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