1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
\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.
|