什么是 Eff 和 A​​ff?

What are Eff and Aff?

Purescript 类型之间的关系是什么Eff and Aff?是否可以相互转换?

我刚开始使用来自 Haskell 的 Purescript,这两种类型似乎都大致起到了 IO 在 Haskell 中的作用。这样说公平吗?

Eff 是同步效果单子。它用于对有效的外部 JavaScript 代码进行排序 - 例如随机数生成、读取和写入可变值、写入控制台以及抛出和捕获异常。

Aff 是一个异步效果 monad。它可以处理和排序有效的异步代码,例如 AJAX 请求、超时以及网络和文件 IO。它还可以通过使用 liftEff 来执行同步效果。它还提供了一个很好的错误处理机制。

可以使用 liftEffEff 转换为 Aff(所有不暂停的都是允许暂停的实例),但另一个方向一般是不可能的。通过提供回调,Aff 操作可以在 Eff 上下文中 运行。

Haskell 的 IO 与两者相似,但比 Eff 更接近 Aff,因为 IO 操作可以表示异步事物(请参阅threadDelay 例如)。