\begin{comment} \begin{code} module Control.Lens.Edit.Generic ( idEL, compEL ) where import Control.Edit import Control.Lens.Edit import Control.Lens \end{code} \end{comment} Wir übernehmen einige der in \cite{hofmann2012edit} vorgestellten Konstruktionen für generische edit-lenses. Zunächst bilden edit-lenses die Morphismen einer Kategorie vermöge folgender Konstruktionen: \begin{defn}[Identität von edit-lenses] Blub % TODO \begin{code} idEL :: EditLens () a a idEL = EditLens () (over _2 id) (over _2 id) \end{code} \end{defn} \begin{defn}[Komposition von edit-lenses] Blub % TODO \begin{code} compEL :: EditLens c b c -> EditLens c' a b -> EditLens (c, c') a c compEL (EditLens c1 bc cb) (EditLens c2 ab ba) = EditLens (c1, c2) ac ca where ac ((c1, c2), a) = ((c1', c2'), c) where (c2', b) = ab (c2, a) (c1', c) = bc (c1, b) ca ((c1, c2), c) = ((c1', c2'), a) where (c2', a) = ba (c2, b) (c1', b) = cb (c1, c) \end{code} \end{defn} Es ist leider nicht möglich eine Instanz für die Kategorien-Typeklasse der Haskell-Standardlibrary \cite[\texttt{Control.Category}]{base} zu definieren, da sich die Typklasse \texttt{Category} auf Typen vom Kind $\ast \to \ast \to \ast$ einschränkt, \texttt{EditLens} jedoch notwendigerweise den Typ seines Komplements mit sich trägt.