层和可扩展效果之间有什么区别?

时间:2014-09-23 12:40:17

标签: haskell monads

extensible effects库和layers库似乎具有相同的目标(可以轻松地将不同的效果组合在一起)。 他们都谈到了他们提供的优于mtl的优势,但都没有提到另一个。两者都可以完成同样的事情吗?一个人包含另一个吗?每个都有一些其他缺乏的功能吗?

2 个答案:

答案 0 :(得分:10)

虽然我从来没有遇到任何这些问题,但the articles对此非常直截了当。

虽然layers建立在MTL之上,exteff是一种完全不同的方法。 exteff定义了一个monad,其中包含有关其类型的效果的信息。 exteff声称要解决monad排序问题,即如果monad A和B是可互换的,那么经典方法会使A (B a)B (A a)成为不同的类型。在exteff他们是一样的。

layers的{​​{3}}来看,它似乎没有解决这个问题。

答案 1 :(得分:3)

添加到polkovnikov的答案,extensible-effects最初是编码效果,layers(和mtl)中的效果是最终编码的。这两种方法都有优点和缺点,在某些情况下表现更好或更差。