2012-11-08 1 views
10

Mögliche Duplizieren:
lenses, fclabels, data-accessor - which library for structure access and mutation is betterData.Lens oder Control.Lens

Ich werde ein Objektiv-Paket auf meinem nächsten Haskell-Projekt verwenden und zu lernen. Ich hatte mich fast für das Data.Lens Paket entschieden, als ich diesen Beitrag fand, der van Laarhoven Objektive im Control.Lens Paket erwähnt.

Ich verstehe nicht wirklich die Unterschiede genug, um zu entscheiden, welche zu verwenden. Welches Paket würdest du vorschlagen, das ich bei einem realen Projekt lerne/verwende?

Danke.

lenses, fclabels, data-accessor - which library for structure access and mutation is better

+4

Was stimmt nicht mit der Antwort dieser SO-Verbindung? – Pubby

+0

Etwas * kann * mit der Antwort dieser SO-Verbindung falsch sein, aber wenn Sie uns nicht sagen, was Sie wissen wollen, das ist nicht in dieser Antwort, werden Sie nicht die Informationen erhalten, nach denen Sie suchen. – Ben

+2

Ich denke, es ist ein dritter Gesichtspunkt, nach dem ich suche. Dieser SO-Beitrag wurde vom Ersteller beider Pakete geschrieben. Er gibt einen Vergleich zwischen den 2, aber es ist ein wenig über meinen Kopf. – MFlamer

Antwort

14

Control.Lens ist fast sicher, was Sie wollen. Data.Lens kam zuerst und ist einfacher, aber Control.Lens hat viele Vorteile und wird aktiv entwickelt.

Andere als Objektive, Control.Lens hat viele verwandte Arten, wie Traversalen (eine Traversierung ist wie eine Linse, die auf n Werte beziehen kann, nur eine), Falten, lesen/ändern nur Linsen, indizierte Linsen, Isomorphismen .. Es enthält auch eine viel größere Bibliothek nützlicher Funktionen und vordefinierter Objektive für Standard-Bibliothekstypen, Template Haskell zum Ableiten von Objektiven und eine Menge Code für andere Dinge wie generische Zipper und Uniplates-generic Traversal.

Es ist eine große Bibliothek - Sie müssen nicht alles verwenden, aber es ist schön, das Ding zu haben, das Sie bereits geschrieben haben möchten. Der Hauptvorteil von Data.Lens ist, dass es einfacher ist und als solches keine Erweiterungen über Haskell 98 hinaus benötigt. Aber beachte, dass wenn du einfach nur ein Control.Lens-Objektiv aus einer Bibliothek exportieren willst, kannst du es machen, ohne es zu verlassen Haskell 98 - in der Tat, ohne auf das Paket angewiesen zu sein.

+0

Nach ein wenig mehr Forschung letzte Nacht kam ich zu dem gleichen Schluss. Danke für die ausgezeichneten Antworten. – MFlamer

6

Wenn Sie mit einem Real World Project (tm) zu tun hat, würde ich sehr Control.Lens empfehlen. Edwardk hat sich viel Mühe gegeben, und ich bin sicher, dass er sich über deinen Anwendungsfall freuen würde. Meiner Meinung nach wird dies die kanonische Lens-Bibliothek werden. Ich glaube, es ist sicher zu sagen, dass alles, was Sie mit Data.Lens tun können, Sie mit Control.Lens tun können.

0

Data.Lens ist viel einfacher und einfacher zu arbeiten. Control.Lens hat eine sehr große Anzahl von Modulen und verwendet Spracherweiterungen, um die Arbeit zu erledigen.

Verwandte Themen