Haskell Fay序列异步调用

时间:2014-09-04 13:09:14

标签: javascript haskell asynchronous monads fay

最近,我决定将一些javascript代码移植到Fay,这样我就可以保证类型的正确性,这样我就能以一种简洁的方式处理异步(并且还可以进行实验)。我构建了一些javascript对象,其唯一目的是同步并行的ajax调用。我对Haskell很新。

在Fay,我希望发起一些ajax调用,并使用Control.Monad.Parallel.sequence来使它们同步。但是,由于fay-jquery AJAX functions没有为成功/失败回调返回monad,而且this example in the fay snaplet也没有返回,我陷入困境并迫切需要指导。它们都返回一个Fay()monad,它似乎是为了将懒惰的haskell调用一起排序到严格的javascript语句中,而我有点期待类似(Fay(),IO(要么是SuccessResult FailureResult))的元组,因为关闭AJAX请求会导致两种不同的操作。

我对此有很多疑问:

  1. 继续monad是我正在寻找的吗?
  2. 是否有任何与Fay一起使用的模块,并将此monad用于异步javascript?
  3. 由于fay-jquery's AJAX functions的副作用发生在返回的Fay()后绑定或排序的任何内容之后,这是否会使函数不纯?
  4. 我注意到continuation monad in the Fay repo - 为什么不在Fay本身使用它?我唯一能找到的是this gist which wraps async node.js fs calls
  5. 答案将不胜感激!他们会大量帮助我对这些东西的不理解。

1 个答案:

答案 0 :(得分:2)

  1. 是。 Cont示例基本上可以执行您想要的操作,无法处理错误。
  2. ^
  3. 这取决于你对" impure"的定义。我说在执行所有效果之前返回的函数仍然可以是纯粹的。这就是Haskell中几乎所有延迟计算的情况。例如,参见Haskell' s forkIO :: IO () -> IO ThreadId
  4. 我不确定你对Fay本身"的意思是什么"。我不认为Prelude应该使用这个,但其他图书馆可以使用Cont,如果你想让这个可以随意制作一个包。