Purescript类型Eff
和Aff
之间的关系是什么?是否有可能在它们之间进行转换?
我刚刚开始使用来自Haskell的Purescript,看起来这两种类型大致上都是IO
在Haskell中的作用。那是公平的吗?
答案 0 :(得分:40)
Eff
是一个同步效果monad。它用于对有效的外部JavaScript代码进行排序 - 例如随机数生成,读取和写入可变值,写入控制台以及抛出和捕获异常。
Aff
是一个异步效果monad。它可以处理和排序有效的异步代码,如AJAX请求,超时,网络和文件IO。它还可以使用liftEff
执行同步效果。它还提供了一种处理错误的好机制。
可以使用Eff
从Aff
转换为liftEff
(不停顿的所有内容都是允许暂停的内容的实例),但另一个方向是一般来说不可能。可以通过提供回调在Aff
上下文中运行Eff
个操作。
Haskell的IO
与两者相似,但Aff
更接近Eff
,IO
行动可以代表异步事物(例如,请参阅threadDelay
)