Looking for haskell Keywords? Try Ask4Keywords

Haskell LanguageLinse


Einführung

Lens ist eine Bibliothek für Haskell, die Linsen, Isomorphismen, Falten, Traversierungen, Getter und Setter bereitstellt, die eine einheitliche Schnittstelle für das Abfragen und Manipulieren beliebiger Strukturen bietet, ähnlich wie bei den Accessor- und Mutator-Konzepten von Java.

Bemerkungen

Was ist eine Linse?

Objektive (und andere Optiken) erlauben uns zu beschreiben, wie wir auf einige Daten zugreifen wollen, von dem, was wir damit machen wollen. Es ist wichtig, zwischen dem abstrakten Begriff einer Linse und der konkreten Umsetzung zu unterscheiden. Abstraktes Verständnis macht das Programmieren mit dem lens auf lange Sicht viel einfacher. Es gibt viele isomorphe Darstellungen von Linsen, sodass wir in dieser Diskussion keine konkreten Implementierungsdiskussionen vermeiden und stattdessen einen allgemeinen Überblick über die Konzepte geben.

Fokussierung

Ein wichtiger Begriff für das abstrakte Verständnis ist der Begriff der Fokussierung . Wichtige Optiken konzentrieren sich auf einen bestimmten Teil einer größeren Datenstruktur, ohne den größeren Kontext zu vergessen. Beispielsweise fokussiert die Linse _1 auf das erste Element eines Tupels, vergisst jedoch nicht, was sich im zweiten Feld befand.

Sobald wir den Fokus haben, können wir darüber sprechen, welche Operationen wir mit einem Objektiv ausführen dürfen. In Anbetracht einer Lens sa , bei der ein Datentyp vom Typ s auf ein bestimmtes a fokussiert wird, können wir entweder

  1. Extrahieren Sie das a indem Sie den zusätzlichen Kontext oder vergessen
  2. Ersetzen Sie das a indem Sie einen neuen Wert angeben

Diese entsprechen den bekannten get und set Operationen, die normalerweise zur Charakterisierung einer Linse verwendet werden.

Andere Optiken

In ähnlicher Weise können wir über andere Optiken sprechen.

Optik Konzentriert sich auf...
Linse Ein Teil eines Produktes
Prisma Ein Teil einer Summe
Traversal Null oder mehr Teile einer Datenstruktur
Isomorphismus ...

Jede Optik fokussiert auf unterschiedliche Art und Weise, abhängig davon, mit welcher Art von Optik wir verschiedene Operationen ausführen können.

Zusammensetzung

Darüber hinaus können wir eine der beiden bisher besprochenen Optiken zusammenstellen, um komplexe Datenzugriffe zu spezifizieren. Die vier Arten von Optiken, die wir besprochen haben, bilden ein Gitter, das Ergebnis des Zusammenstellens zweier Optiken ist ihre obere Grenze.

Geben Sie hier die Bildbeschreibung ein

Wenn wir zum Beispiel eine Linse und ein Prisma zusammensetzen, erhalten wir eine Durchquerung. Der Grund dafür ist, dass wir uns bei ihrer (vertikalen) Zusammensetzung zunächst auf einen Teil eines Produkts und dann auf einen Teil einer Summe konzentrieren. Das Ergebnis ist eine Optik, die auf genau null oder einen Teil unserer Daten fokussiert, was ein Sonderfall einer Durchquerung ist. (Dies wird manchmal auch als affine Durchquerung bezeichnet).

In Haskell

Der Grund für die Popularität in Haskell ist, dass es eine sehr kurze Darstellung der Optik gibt. Alle Optiken sind nur Funktionen einer bestimmten Form, die durch Funktionszusammenstellung zusammengesetzt werden können. Dies führt zu einer sehr leichten Einbettung, die es leicht macht, Optiken in Ihre Programme zu integrieren. Darüber hinaus berechnet die Funktionszusammensetzung aufgrund der Besonderheiten der Kodierung automatisch auch die Obergrenze zweier von uns zusammengestellter Optiken. Dies bedeutet, dass wir dieselben Kombinatoren für unterschiedliche Optiken ohne explizites Gießen wiederverwenden können.

Linse Verwandte Beispiele