3

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

在 Fay 中,我希望触发一些 ajax 调用,并使用Control.Monad.Parallel.sequence来使它们同步。但是,我被困住并且迫切需要指导,因为fay-jquery AJAX 函数不会返回成功/失败回调的 monad,而fay snaplet 中的这个示例也没有。它们都返回一个 Fay () monad,它似乎只是为了将惰性 haskell 调用排序到严格的 javascript 语句中,而我有点期待像 (Fay (), IO (Either SuccessResult FailureResult)) 的元组,因为触发关闭 AJAX 请求会导致两种不同的操作。

我对此有很多疑问:

  1. 延续单子是我要找的吗?
  2. 是否有任何模块可以与 Fay 一起使用,并将这个 monad 用于异步 javascript?
  3. 由于fay-jquery 的 AJAX 函数的副作用发生在返回的 Fay() 之后绑定或排序的任何内容之后,这是否会使函数不纯?
  4. 我注意到Fay repo 中有一个 continuation monad - 为什么 Fay 本身没有使用它?我唯一能找到的是这个包含异步 node.js fs 调用的要点

答案将不胜感激!他们会极大地帮助我对这些东西的不稳定理解。

4

1 回答 1

2
  1. 是的。Cont 示例基本上可以满足您的需求,没有错误处理。
  2. ^
  3. 这取决于您对“不纯”的定义。我想说的是,在执行所有效果之前返回的函数仍然可以是纯函数。Haskell 中几乎所有的惰性计算都是这种情况。例如参见 Haskell 的forkIO :: IO () -> IO ThreadId
  4. 我不确定您所说的“在 Fay 本身”是什么意思。我不认为 Prelude 应该使用这个,但是其他库可以使用 Cont,如果你想要这个,请随意从示例中制作一个包。
于 2014-09-08T08:06:46.943 回答