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-запроса приводит к двум различным действиям.
У меня много вопросов по этому поводу:
- Монада продолжения - это то, что я ищу?
- Существуют ли модули, которые работают с Fay и используют эту монаду для асинхронного JavaScript?
- Поскольку побочный эффект AJAX-функций в fay-jquery возникает после того, как что-либо связано или упорядочено после возвращенного Fay (), это делает функции нечистыми?
- Я заметил монаду продолжения в репозитории Fay - почему она не используется в самом Fay? Единственное, что я могу найти, это суть, которая оборачивает вызовы async node.js fs.
Ответы будут высоко оценены! Они бы очень помогли моему шаткому пониманию этого материала.
1 ответ
- Да. Пример Cont по сути делает то, что вы хотите, без обработки ошибок.
- ^
- Это зависит от вашего определения "нечистый". Я бы сказал, что функция, возвращающаяся до того, как все ее эффекты были выполнены, все еще может быть чистой. Это касается практически всех ленивых вычислений в Haskell. посмотрите, например, Haskell's
forkIO :: IO () -> IO ThreadId
- Я не уверен, что ты имеешь в виду под "в самой Фэй". Я не думаю, что Prelude должен использовать это, но другие библиотеки могут использовать Cont, и если вы хотите, вы можете сделать пакет из примера.