Каковы различия между слоями и расширяемыми эффектами?
Библиотека extensible effects и библиотека layers, по-видимому, имеют одинаковые цели (что делает ее легко создавать разные эффекты вместе).
Оба говорят о преимуществах, которые они предлагают над mtl, но не ссылаются на другие. Могут ли оба сделать то же самое? Включает ли кто-нибудь другого? Есть ли у каждой функция, которой не хватает другой?
Ответы
Ответ 1
Пока я ни с кем не сталкивался ни с одним из них, это довольно неудобно из статей.
Хотя layers
скорее строятся на MTL, exteff
- совершенно другой подход. exteff
определяет одну монаду, которая содержит информацию о ее эффектах в своем типе. exteff
утверждает, что решает проблему упорядочения монады, т.е. если монады A и B взаимозаменяемы, классический подход сделает типы A (B a)
и B (A a)
разными. В exteff
они одинаковы.
Из interface layers
кажется, что это не решило эту проблему.
Ответ 2
добавление к ответам полковников, extensible-effects
являются первоначально закодированными эффектами, а эффекты в layers
(и mtl
) окончательно кодируются. оба подхода имеют преимущества и недостатки, а в некоторых сценариях лучше или хуже.