2016-06-06 4 views
24

Какова связь между типами Purescript Eff и Aff? Можно ли конвертировать между ними?Что такое Eff и Aff?

Я только начинаю с Purescript из Haskell, и кажется, что оба типа грубо служат той роли, которую IO имеет в Haskell. Справедливо ли это сказать?

ответ

31

Eff - синхронный эффект монады. Он используется для упорядочивания внешнего кода JavaScript - таких, как генерация случайных чисел, чтение и запись изменяемых значений, запись на консоль и исключение и перехват исключений.

Aff - монограмма асинхронного эффекта. Он может обрабатывать и настраивать эффективный асинхронный код, например, запросы AJAX, тайм-ауты и сетевое и файловое ввода-вывода. Он также может выполнять синхронные эффекты, используя liftEff. И он также обеспечивает хороший механизм для обработки ошибок.

можно конвертировать из Eff в Aff используя liftEff (все, что не приостановку является экземпляром то, которое позволило сделать паузу), но в другом направлении не представляется возможным в целом. Aff действия могут выполняться в контексте Eff путем предоставления обратного вызова.

Хаскелла IO похож на обоих, но ближе к Aff чем Eff в том, что IO действия могут представлять асинхронные вещи (см threadDelay, например).

+1

Я думаю, что стоит упомянуть 'launchAff', который можно использовать для синхронного запуска вычисления' Aff', если это необходимо. Он определен в 'Control.Monad.Aff'. У преследования будет лучшее описание того, что он делает и как это работает, чем я могу вписаться в комментарий. –

Смежные вопросы