ИНФОРМАЦИЯ: Я отвечаю на этот вопрос в контексте PureScript 0.12, хотя в этом вопросе используется подход до 0.12 Eff
.
В основном я ищу функцию с этой сигнатурой:
getData :: forall eff. ExceptT Err (Eff (ajax :: AJAX | eff)) String
В настоящее время purescript-affjax
вызывает XMLHttpRequest.open
в асинхронном режиме, поскольку во втором аргументе используется значение true
(подробнее XMLHttpRequest
Сведения об API здесь ).
Невозможно легко заменить «драйвер xhr», который запускается affjax
в текущей версии этой библиотеки, но продолжается обсуждение о создании этогоконфигурируемый кусокЕсли вы действительно хотите выполнить синхронный вызов ajax, вы, вероятно, должны написать для него свой собственный FFI
или ... внести свой вклад в библиотеку: -)
Но как мне это написать, чтобы он хорошо сочетался с контекстом Eff?
В общем, нет способа превратить Aff
в вычисление Effect
.Это имеет смысл, если вы думаете о Effect
как об абстракции, которая моделирует последовательность инструкций без понятия «будущее» или «время».Мы просто не можем «вернуть» будущее значение прямо сейчас ...
Конечно, есть liftEffect
, который может превратить синхронные вычисления в Aff
, потому что мы всегда можем взять синхронные вычисления и просто запустить их вбудущее.
Я думаю, что при использовании по умолчанию javascript
PureScript backend вполне обычно превращать все приложение в Aff
и использовать launchAff_
в функции main
.