2014-09-23 9 views

Antwort

10

Während ich in keiner Weise mit denen von denen erlebt werde, ist es ziemlich geradlinig von the articles.

Während layers eher auf MTL aufbauen, ist exteff ein ganz anderer Ansatz. exteff definiert eine Monade, die Informationen über ihre Auswirkungen in ihrem Typ enthält. exteff beansprucht, das Problem der Monadenordnung zu lösen, d. H. Wenn die Monaden A und B austauschbar sind, würde der klassische Ansatz A (B a) und B (A a) verschiedene Typen ergeben. In exteff sind sie gleich.

Von der interface von layers scheint es, dass es dieses Problem nicht gelöst hat.

+0

Die github-Seite von'Extensible-effects' bietet einige Probleme mit dem Paket, von denen nur eines für GHC> 7,8 gilt, nämlich: 'Gemeinsame Funktionen können nicht gruppiert werden mit typeclasses, z. Die Funktionen ask und getState können nicht mit einigen [...] gruppiert werden (https://github.com/suhailshergill/extensible-effects). Können Sie mehr darüber erfahren, wie es für das Layer-Paket gilt? Ich denke, wir wären alle daran interessiert, das Problem aus verschiedenen Blickwinkeln zu sehen. cc: @ibotty –

3

Hinzufügen zu Polkovnikovs Antwort, extensible-effects sind zunächst codierte Effekte und die Effekte in layers (und mtl) sind endgültig codiert. Beide Ansätze haben Vor- und Nachteile und schneiden in manchen Szenarien besser oder schlechter ab.

+4

Können Sie konkreter sein? In welchen spezifischen Szenarien schneidet der eine oder andere Ansatz besser oder schlechter ab? – lmm

+0

Ich werde auf diese Antwort zurückkommen, wenn ich den [Benchmark] (https://github.com/feuerbach/freemonad-benchmark) aktualisiere, um auch die Fälle zu testen, in denen freie Monaden besser funktionieren. – ibotty

+2

ich denke, ich werde nicht lange Zeit haben. Das Wesentliche ist, dass Sie mit mtl/layers (oder genauer gesagt: transformers) zahlen, wann immer Sie einen neuen Transformator hinzufügen. Heben durch 't (t1 (t2 (t3 m))) ist ziemlich teuer und nicht notwendig mit einem freien monad-like-Ansatz wie' Extensible-Effects' verwendet. aber: mit nur einem Transformator ist es ** schneller ** als erweiterbare Effekte. Das ist, was Sie in der Benchmark sehen können, die ich verlinkt habe. – ibotty

Verwandte Themen