Die Bibliothek extensible effects und die Bibliothek layers scheinen die gleichen Ziele zu haben (so dass es leicht ist, verschiedene Effekte zusammen zu komponieren). Beide sprechen über die Vorteile, die sie über mtl bieten, aber keiner verweist auf den anderen. Können beide das Gleiche erreichen? Subsumiert man den anderen? Hat jeder eine Eigenschaft, die dem anderen fehlt?Was sind die Unterschiede zwischen Layern und erweiterbaren Effekten?
Antwort
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.
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.
Können Sie konkreter sein? In welchen spezifischen Szenarien schneidet der eine oder andere Ansatz besser oder schlechter ab? – lmm
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
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
- 1. Was sind die Unterschiede zwischen zweien?
- 2. Was sind die Unterschiede zwischen Karma Reportern?
- 3. Was sind die Unterschiede zwischen & und &&, | und || in R?
- 4. Was sind die Unterschiede zwischen PECL und PEAR?
- 5. Was sind die Unterschiede zwischen Active Record und Repository-Muster?
- 6. Graph - Was sind die Unterschiede zwischen eingebetteten und topologischen Graphen?
- 7. Was sind die Unterschiede zwischen C und C++ Aufrufkonventionen?
- 8. Was sind die Unterschiede zwischen Vanille Perl und Strawberry Perl?
- 9. Was sind die Unterschiede zwischen LDAP und Active Directory?
- 10. Was sind die Unterschiede zwischen WCF und traditionellen ASP.NET Web
- 11. Was sind die Unterschiede zwischen Gleitern und Programmierern?
- 12. Was sind die Unterschiede zwischen to.equal (true) und to.be.true?
- 13. Was sind die Unterschiede zwischen WebAPI und WebAPI 2
- 14. Was sind die Unterschiede zwischen HasOne und Referenzen in Nhibernate?
- 15. Was sind die Unterschiede zwischen .pem, .cer und .der?
- 16. Was sind die größten Unterschiede zwischen fopen und curl?
- 17. Was sind die Unterschiede zwischen LLVM und Java-Bytecode?
- 18. Was sind die praktischen Unterschiede zwischen Fliegengewicht und Singleton-Mustern?
- 19. Was sind die Unterschiede zwischen flex mxml und actionscript-3?
- 20. Was sind die Unterschiede zwischen ADOdb und PDO in PHP?
- 21. Was sind die Unterschiede zwischen WebServiceBinding.EmitConformanceClaims und WebServiceBinding.ConformanceClaims?
- 22. Was sind die Unterschiede in JIT zwischen Java und. NET
- 23. Was sind die Unterschiede zwischen Pause und Ausfahrt?
- 24. Was sind die Unterschiede zwischen R.styleable, R.style und R.attr?
- 25. Was sind die Unterschiede zwischen struct_time und datetime?
- 26. Was sind die Unterschiede zwischen ConcurrentQueue und BlockingCollection in .Net?
- 27. Was sind die Unterschiede zwischen Entweder und Option?
- 28. Was sind die Unterschiede zwischen Opera Unite und Node.js?
- 29. Was sind die Unterschiede zwischen rbenv, rvm und chruby?
- 30. Was sind die Unterschiede zwischen lexikalischen und statischen Scoping?
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 –