2014-09-23 5 views
16

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

ответ

10

Хотя я ни с кем не общался ни с одним из них, это довольно страшно от the articles.

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

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

+0

На странице github 'extensible-effects' описаны некоторые проблемы с пакетом, из которых только один применяется к GHC> 7.8, а именно: ' Общие функции не могут быть сгруппированы с использованием классных классов, например. функции ask и getState не могут быть сгруппированы с некоторыми [...] '(https://github.com/suhailshergill/extensible-effects). Не могли бы вы рассказать о том, как это относится к пакету? Я думаю, нам всем было бы интересно увидеть проблему с разных «углов». cc: @ibotty –

3

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

+4

Можете ли вы быть более конкретными? В каких конкретных сценариях тот или иной подход работает лучше или хуже? – lmm

+0

Я вернусь к этому ответу, когда обновляю [benchmark] (https://github.com/feuerbach/freemonad-benchmark), чтобы также проверить случаи, когда свободные монады работают лучше. – ibotty

+2

Думаю, у меня не будет времени надолго. суть в том, что с mtl/layers (или точнее: трансформаторы) вы платите каждый раз, когда добавляете новый трансформатор. подъем через 't (t1 (t2 (t3 m))) является довольно дорогостоящим и не обязательным при использовании свободного монад-подхода, поскольку используется« расширяемые эффекты ». но: только с одним трансформатором это ** путь ** быстрее, чем растяжимые эффекты. это то, что вы можете видеть в тестируемом ящике. – ibotty

Смежные вопросы