最近,我决定将一些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(Either SuccessResult FailureResult))的元组,因为发出AJAX请求会导致两个不同的动作。我有很多关于这个问题的问题:
- 延续单子是我要找的东西吗?
- 有没有与 Fay 兼容并使用此单子进行异步 JavaScript 的模块?
- 由于 fay-jquery 的 AJAX 函数 的副作用发生在返回的 Fay () 之后绑定或序列化的任何内容,这是否使函数不纯?
- 我注意到 Fay 存储库中有一个 延续单子 - 为什么它没有在 Fay 中使用?我唯一能找到的就是 这个包装异步 node.js fs 调用的 gist。
非常感谢您的回答!它们将极大地帮助我对这些内容的理解。
forkIO
会立即返回类型为IO ThreadID
的某个东西,它代表将来创建线程的副作用。由于将函数绑定到fay monad只意味着该函数在生成Fay monad的函数之后立即执行,因此Fay monad肯定不代表AJAX调用成功或失败的副作用,因此AJAX调用必须是不纯的。 - user1158559