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