什么是Eff和Aff?

时间:2016-06-06 15:34:57

标签: purescript

Purescript类型EffAff之间的关系是什么?是否有可能在它们之间进行转换?

我刚刚开始使用来自Haskell的Purescript,看起来这两种类型大致上都是IO在Haskell中的作用。那是公平的吗?

1 个答案:

答案 0 :(得分:40)

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

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

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

Haskell的IO与两者相似,但Aff更接近EffIO行动可以代表异步事物(例如,请参阅threadDelay