summaryrefslogtreecommitdiff
path: root/edit-lens/src/Control/Edit/Container.lhs
diff options
context:
space:
mode:
Diffstat (limited to 'edit-lens/src/Control/Edit/Container.lhs')
-rw-r--r--edit-lens/src/Control/Edit/Container.lhs32
1 files changed, 29 insertions, 3 deletions
diff --git a/edit-lens/src/Control/Edit/Container.lhs b/edit-lens/src/Control/Edit/Container.lhs
index 32ec479..09040c8 100644
--- a/edit-lens/src/Control/Edit/Container.lhs
+++ b/edit-lens/src/Control/Edit/Container.lhs
@@ -2,7 +2,8 @@
2\begin{code} 2\begin{code}
3module Control.Edit.Container 3module Control.Edit.Container
4 ( Container(..), Shape, Content 4 ( Container(..), Shape, Content
5 , ContainerEdit(..) 5 , FoldableContainer(..)
6 , ContainerEdit(..), ContainerEdits
6 , module Control.Edit 7 , module Control.Edit
7 ) where 8 ) where
8 9
@@ -17,7 +18,7 @@ import Control.Lens
17\end{code} 18\end{code}
18\end{comment} 19\end{comment}
19 20
20\citeauthor{hofmann2012edit} stellen \emph{container} vor—eine systematische Sicht auf Datenstrukturen, die es erlaubt eine generische edit-language zu definieren. 21\citeauthor{hofmann2012edit} stellen \emph{container} vor—eine systematische Sicht auf Datenstrukturen, die es erlaubt eine generische edit-language zu definieren, im folgenden wiederholen wir die dortigen Definitionen.
21 22
22Intuitiv zerlegt die Darstellung als container eine polymorphe Datenstruktur in ihre \emph{Form} (\emph{shape}), ordnet der Form eine Menge von \emph{Positionen} zu und belegt jede Position mit einem Wert: 23Intuitiv zerlegt die Darstellung als container eine polymorphe Datenstruktur in ihre \emph{Form} (\emph{shape}), ordnet der Form eine Menge von \emph{Positionen} zu und belegt jede Position mit einem Wert:
23 24
@@ -66,6 +67,12 @@ type Content c = Domain (ModContent c)
66\end{code} 67\end{code}
67\end{defn} 68\end{defn}
68 69
70TODO
71\begin{code}
72class Container c => FoldableContainer c where
73 containerContent :: Fold c (Content c)
74\end{code}
75
69\begin{defn}[Klassifikation von edits auf shapes] 76\begin{defn}[Klassifikation von edits auf shapes]
70Für einen container-typ $(I, P, \text{postitions})$ klassifizieren wir die edits $\partial i \in \partial I$ wie folgt: 77Für einen container-typ $(I, P, \text{postitions})$ klassifizieren wir die edits $\partial i \in \partial I$ wie folgt:
71 78
@@ -74,10 +81,29 @@ Für einen container-typ $(I, P, \text{postitions})$ klassifizieren wir die edit
74 \item[deletions] $\forall i \in \Dom (\partial i) \colon i \cdot \partial i \leq i$ 81 \item[deletions] $\forall i \in \Dom (\partial i) \colon i \cdot \partial i \leq i$
75 \item[rearrangements] $\forall i \in \Dom (\partial i) \colon \size{\text{positions}(i \cdot \partial i)} = \size{\text{positions}(i)}$ 82 \item[rearrangements] $\forall i \in \Dom (\partial i) \colon \size{\text{positions}(i \cdot \partial i)} = \size{\text{positions}(i)}$
76\end{description} 83\end{description}
84
85Für ein rearrangement $\partial i$ nennen wir eine Funktion $f \colon I \to P \to P$ \emph{kompatibel} mit $\partial i$ gdw:
86
87$$\forall i \in \Dom(\partial i) \colon f(i) \upharpoonright \text{positions}(i) \leftrightarrow \text{positions}(i \cdot \partial i)$$
88
89D.h. $f(i)$ ist, eingeschränkt auf die Positionen, die in $i$ belegt sind, eine Bijektion auf die in $i \cdot \partial i$ belegten Positionen.
77\end{defn} 90\end{defn}
78 91
79\begin{defn}[container-edits] 92\begin{defn}[container-edits]
80 TODO 93 Für eine Instanz eines container-typs $(I, P, \text{positions})$ dessen Inhalt Elemente eines Moduls $X$ sind können wir aus den edits auf die shapes $\partial I$ des containers und denen auf seinen Inhalt $\partial X$ edits für den container konstruieren:
94
95\[
96\begin{array}{lll}
97 & \{ \text{fail} \} & \\
98 \cup & \{ \text{mod}(p, \partial x) & \mid p \in P, \partial x \in \partial X \} \\
99 \cup & \{ \text{ins}(\partial i) & \mid \text{$\partial i$ ist insertion} \} \\
100 \cup & \{ \text{del}(\partial i) & \mid \text{$\partial i$ ist deletion} \} \\
101 \cup & \{ \text{rearr}(\partial i, f) & \mid \text{$\partial i$ ist rearrangement und kompatibel mit $f$} \} \\
102\end{array}
103\]
104
105In Haskell verzichten wir auf die Klassifikation von shape-edits und fassen daher $\text{ins}$, $\text{del}$, und $\text{rearr}$ zusammen.
106
81\begin{code} 107\begin{code}
82data ContainerEdit c where 108data ContainerEdit c where
83 Fail :: ContainerEdit c 109 Fail :: ContainerEdit c