Каковы различия между слоями и расширяемыми эффектами?

Библиотека extensible effects и библиотека layers, по-видимому, имеют одинаковые цели (что делает ее легко создавать разные эффекты вместе). Оба говорят о преимуществах, которые они предлагают над mtl, но не ссылаются на другие. Могут ли оба сделать то же самое? Включает ли кто-нибудь другого? Есть ли у каждой функция, которой не хватает другой?

Ответы

Ответ 1

Пока я ни с кем не сталкивался ни с одним из них, это довольно неудобно из статей.

Хотя layers скорее строятся на MTL, exteff - совершенно другой подход. exteff определяет одну монаду, которая содержит информацию о ее эффектах в своем типе. exteff утверждает, что решает проблему упорядочения монады, т.е. если монады A и B взаимозаменяемы, классический подход сделает типы A (B a) и B (A a) разными. В exteff они одинаковы.

Из interface layers кажется, что это не решило эту проблему.

Ответ 2

добавление к ответам полковников, extensible-effects являются первоначально закодированными эффектами, а эффекты в layersmtl) окончательно кодируются. оба подхода имеют преимущества и недостатки, а в некоторых сценариях лучше или хуже.