add parametric lens reference and todo
[msc-thesis1617.git] / methods.top.tex
index e29f16d..b54b50f 100644 (file)
@@ -27,7 +27,7 @@ image all fields are entered and the \CI{TaskValue} transitions to the
        \caption{The states of a \CI{TaskValue}}\label{fig:taskvalue}
 \end{figure}
 
-\begin{lstlisting}[language=Clean,label={lst:taskex},%
+\begin{lstlisting}[label={lst:taskex},%
        caption={An example \gls{Task} for entering a name}]
 :: Name = { firstname :: String
           , lastname  :: String
@@ -67,6 +67,7 @@ specialization instances for these functions and show an according interface.
 Generated interfaces can be modified with decoration operators.
 
 \section{Combinators}
+\todo{check and refine}
 \Glspl{Task} can be combined using so called \gls{Task}-combinators.
 Combinators describe relations between \glspl{Task}. \Glspl{Task} can be
 combined in parallel, sequenced and their result values can be converted to
@@ -99,7 +100,7 @@ Listing~\ref{lst:combinators}.
                dictates.
 \end{itemize}
 
-\begin{lstlisting}[language=Clean,%
+\begin{lstlisting}[%
        caption={\Gls{Task}-combinators},label={lst:combinators}]
 //Step combinator
 (>>*)  infixl 1 :: (Task a) [TaskCont a (Task b)] -> Task b     | iTask a & iTask b
@@ -123,19 +124,33 @@ Listing~\ref{lst:combinators}.
 or in the \gls{iTasks} system. The shared data can be a file on disk, it can be
 the time, a random integer or just some data stored in memory. The actual
 \gls{SDS} is just a record containing functions on how to read and write the
-source. In these functions the \CI{*World} is available and therefore it can
-interact with the outside world. The \CI{*IWorld} is also available and
-therefore the functions can also access other shares, possibly combining them.
+source. In these functions the \CI{*IWorld} which in turn contains the real
+program \CI{*World}. Accessing the outside world is required for interacting
+with it and thus the functions can access files on disk, raw memory, other
+shares and combine shares.
 
 The basic operations for \glspl{SDS} are get, set and update. The signatures
-for these functions are shown in Listing~\ref{lst:shares}. All of the
-operations are atomic in the sense that during reading no other tasks are
-executed.
+for these functions are shown in Listing~\ref{lst:shares}. By default, all
+shares are files containing a \gls{JSON} encoded version of the object and thus
+are persistent between restarts of the program. Library functions for shares
+residing in memory are available as well. The three main operations on shares
+are atomic in the sense that during reading no other tasks are executed.
+
+The basic type for \glspl{SDS} has three \todo{parametric
+lenses}\cite{domoszlai_parametric_2014}.
 
 \begin{lstlisting}[%
-       language=Clean,label={lst:shares},caption={\Gls{SDS} functions}]
+       label={lst:shares},caption={\Gls{SDS} functions}]
+:: RWShared p r w = ... 
+:: ReadWriteShared r w :== RWShared () r w
+:: ROShared p r :== RWShared p () r
+:: ReadOnlyShared r :== ROShared () r
+
+:: Shared r :== ReadWriteShared r r
+
 get ::          (ReadWriteShared r w)           -> Task r | iTask r
 set :: w        (ReadWriteShared r w)           -> Task w | iTask w
 upd :: (r -> w) (ReadWriteShared r w)           -> Task w | iTask r & iTask w
 
+sharedStore :: String a -> Shared a | JSONEncode{|*|}, JSONDecode{|*|}
 \end{lstlisting}