extensible effects库和layers库似乎具有相同的目标(可以轻松地将不同的效果组合在一起)。 他们都谈到了他们提供的优于mtl的优势,但都没有提到另一个。两者都可以完成同样的事情吗?一个人包含另一个吗?每个都有一些其他缺乏的功能吗?
答案 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
)中的效果是最终编码的。这两种方法都有优点和缺点,在某些情况下表现更好或更差。