最近,我决定将一些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(Eupher SuccessResult FailureResult)的元组)关闭AJAX请求会导致两种不同的操作。

我对此有很多疑问:

  • 我想要的是续单吗?
  • 是否有与Fay配合使用的模块,并将此monad用于异步javascript?
  • 由于fay-jquery's AJAX functions的副作用是在返回的Fay()之后绑定(bind)或排序后发生的,所以这会使函数不纯吗?
  • 我注意到continuation monad in the Fay repo-为什么Fay本身不使用它?我唯一能找到的是this gist which wraps async node.js fs calls

  • 答案将不胜感激!他们将极大地帮助我对这些东西有所了解。

    最佳答案

  • 是的。 Cont示例本质上可以满足您的要求,没有错误处理。
  • ^
  • 这取决于您对“不纯”的定义。我想说的是,一个函数在执行完所有效果之前返回的内容仍然是纯净的。 Haskell中几乎所有惰性计算都是这种情况。例如查看Haskell的forkIO :: IO () -> IO ThreadId
  • 我不确定“在Fay本身中”是什么意思。我不认为Prelude应该使用此方法,但是其他库可以使用Cont,如果您愿意,可以随时从示例中制作一个包。
  • 10-06 07:33