Несколько запросов Ajax параллельно с Fay
Я пытаюсь перенести JS-код, который выполняет два AJAX-вызова параллельно, но оба из них необходимо выполнить перед началом работы. С JQuery вы можете сделать:
$.when($.getJSON('/configVal'),
$.getJSON('/configdesc'))
.then(function(configByPluginResponse, configSpecResponse) {
Теперь я не знаю, как справиться с Фэй. Многопоточные части haskell недоступны. Я действительно не хочу монаду состояний, потому что я хочу, чтобы обе выборки запускались параллельно, а не последовательно.
Я обнаружил в источнике Fay этот пример, Cont.hs. Я не уверен, что это действительно может решить проблему, но в любом случае он не скомпилируется, если я просто запускаю "fay Cont.hs"; он жалуется на то, что не знает GHC.Base.Monad. Это с нынешним GIT-главой Фэй.
РЕДАКТИРОВАТЬ: Я хотел бы, если возможно, приятной семантики Haskell, если нет... тогда да, оборачивая jquery "затем". Я не уверен, как добиться продолжения или FRP с Fay, руководство с этим будет оценено (для FRP это сомнительно, достаточно ли Fay достаточно выразителен). Поэтому в качестве второго варианта я бы просто обернул "тогда", но, если возможно, мне бы очень хотелось, чтобы он принимал любое количество одновременных запросов ajax, как это делает JS (возможно, через массив), что может быть сложно достичь. Я сделаю это сам, но думаю, что не смогу.
Я видел в привязках fay-jquery этот комментарий:
-- TODO: jQuery['when'](): figure out Deferred first
Мне удалось скомпилировать Cont.hs, мне пришлось использовать флаг --no-ghc. Так что я проверю немного, хотя флаг отключает проверку типов, не без ума от этого.
Это огорчает необходимость полагаться на библиотеки JS для таких операций, когда я убежден, что как язык Haskell лучше приспособлен для решения таких проблем.
EDIT2: так что мне кажется, что я хочу, сопрограммы. Я видел некоторый код на Haste, который делал похожие вещи, но не делал именно этого. Я также хотел бы принять решение этой проблемы с помощью Haste или GHCJS.
РЕДАКТИРОВАТЬ3: Ну, в normall Haskell кажется, что это делает это; Я думаю, что это будет работать с GHCJS и Haste, но в Fay это, вероятно, должно быть упаковкой JS, я думаю...