Haskell Fay последовательность асинхронных вызовов

Недавно я решил перенести некоторый код javascript на Fay, чтобы гарантировать правильность типа и аккуратно обрабатывать асинхронность (а также экспериментировать). Я построил несколько объектов javascript, единственной целью которых была синхронизация параллельных вызовов ajax. Я совершенно новичок в Хаскеле.

В Fay я надеялся запустить несколько вызовов ajax и использовать, скажем, Control.Monad.Parallel.sequence, чтобы заставить их синхронизироваться. Тем не менее, я застрял и остро нуждаюсь в руководстве, потому что функции AJAX fay-jquery не возвращают монаду для обратных вызовов success / fail, и этот пример в флайлете fay тоже нет. Все они возвращают монаду Fay (), которая, по-видимому, предназначена для секвенирования ленивых вызовов haskell в строгие выражения javascript вместе, в то время как я ожидал чего-то вроде кортежа (Fay (), IO (Either SuccessResult FailureResult)) после запуска Отключение AJAX-запроса приводит к двум различным действиям.

У меня много вопросов по этому поводу:

  1. Монада продолжения - это то, что я ищу?
  2. Существуют ли модули, которые работают с Fay и используют эту монаду для асинхронного JavaScript?
  3. Поскольку побочный эффект AJAX-функций в fay-jquery возникает после того, как что-либо связано или упорядочено после возвращенного Fay (), это делает функции нечистыми?
  4. Я заметил монаду продолжения в репозитории Fay - почему она не используется в самом Fay? Единственное, что я могу найти, это суть, которая оборачивает вызовы async node.js fs.

Ответы будут высоко оценены! Они бы очень помогли моему шаткому пониманию этого материала.

1 ответ

  1. Да. Пример Cont по сути делает то, что вы хотите, без обработки ошибок.
  2. ^
  3. Это зависит от вашего определения "нечистый". Я бы сказал, что функция, возвращающаяся до того, как все ее эффекты были выполнены, все еще может быть чистой. Это касается практически всех ленивых вычислений в Haskell. посмотрите, например, Haskell's forkIO :: IO () -> IO ThreadId
  4. Я не уверен, что ты имеешь в виду под "в самой Фэй". Я не думаю, что Prelude должен использовать это, но другие библиотеки могут использовать Cont, и если вы хотите, вы можете сделать пакет из примера.
Другие вопросы по тегам