Lens

Lens ist die Bezeichnung für spezielle bidirektionale Transformationen, die als Lösung für das View-Update-Problem verwendet werden können.

Dabei ist ein View das z.B. aus dem Bereich Datenbanken bekannte Konstrukt, bei dem eine transformierte Sicht auf Originaldaten gewährt wird. Eine einfache Art des Views ist die Projektion: der View beinhaltet nicht alle Spalten der Originaldaten, sondern nur eine Auswahl.

Das View-Update-Problem dreht sich darum, aus einer Änderung der Daten im View zu einer Änderung der Originaldaten zu kommen. Im Falle der Projektion ist das noch relativ einfach: Es werden nur Werte der ausgewählten Spalten geändert, Werte in anderen Spalten werden nicht modifiziert.

Eine Lens wird als Struktur von drei Funktionen definiert:

  Get: S -> V
  Put: V x S -> S
  Create: V -> S

wobei S die Menge der Originaldaten ist und V die Menge der Daten im View. Die Funktionen müssen folgende Eigenschaften besitzen:

  Get(Put(v, s)) = v
  Get(Create(v)) = v
  Put(Get(s), s) = s


Quelle

"Bidirectional Programming Languages"
John Nathan Foster
University of Pennsylvania
2009