add relevant research
[msc-thesis1617.git] / methods.top.tex
index 9777db5..c479f49 100644 (file)
@@ -1,5 +1,4 @@
-\section{\acrlong{TOP}}
-\subsection{\gls{iTasks}}
+\section{iTasks}
 \gls{TOP} is a recent programming paradigm implemented as
 \gls{iTasks}\cite{achten_introduction_2015} in the pure lazy functional
 language \gls{Clean}\cite{brus_cleanlanguage_1987}. \gls{iTasks} is a
 \gls{TOP} is a recent programming paradigm implemented as
 \gls{iTasks}\cite{achten_introduction_2015} in the pure lazy functional
 language \gls{Clean}\cite{brus_cleanlanguage_1987}. \gls{iTasks} is a
@@ -66,5 +65,75 @@ functions that are captured in the class \CI{iTask}. Basic types have
 specialization instances for these functions and show an according interface.
 Generated interfaces can be modified with decoration operators.
 
 specialization instances for these functions and show an according interface.
 Generated interfaces can be modified with decoration operators.
 
-\subsection{Combinators}
-\todo{Stukje over combinators, in ieder geval bind en paralel}
+\section{Combinators}
+\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
+\glspl{SDS}. Moreover, a very important combinator is the step combinator that
+starts a new task according to the \CI{TaskValue}. The type signatures of the
+basic combinators are shown in Listing~\ref{lst:combinators}.
+
+\begin{itemize}
+       \item Step:
+
+               The step combinator is used to start \glspl{Task} when a predicate on
+               the \CI{TaskValue} holds or an action has been taken place. The bind
+               operator can be written as a step combinator.
+               \begin{lstlisting}[language=Clean]
+(>>=) infixl 1 :: (Task a) (a -> (Task b)) -> (Task b) | iTask a & iTask b
+(>>=) ta f = ta >>* [OnAction "Continue" onValue, OnValue onStable]
+    where
+        onValue (Value a _)     = Just (f a)
+        onValue _               = Nothing
+
+        onStable (Value a True) = Just (f a)
+        onStable _              = Nothing
+               \end{lstlisting}
+       \item Parallel:
+
+               The parallel combinator allows for concurrent \glspl{Task}. The
+               \glspl{Task} combined with these operators will appear at the same time
+               in the web browser of the user and the results are combined as the type
+               dictates.
+\end{itemize}
+
+\begin{lstlisting}[language=Clean,%
+       caption={\Gls{Task}-combinators},label={lst:combinators}]
+//Step combinator
+(>>*)  infixl 1 :: (Task a) [TaskCont a (Task b)] -> Task b     | iTask a & iTask b
+(>>=)  infixl 1 :: (Task a) (a -> Task b)         -> Task b   | iTask a & iTask b
+:: TaskCont a b
+       =     OnValue             ((TaskValue a)  -> Maybe b)
+       |     OnAction    Action  ((TaskValue a)  -> Maybe b)
+       | E.e: OnException         (e              -> b)       & iTask e
+       |     OnAllExceptions     (String         -> b)
+:: Action = Action String
+
+//Parallel combinators
+(-||-) infixr 3 :: (Task a) (Task a)              -> Task a     | iTask a
+(||-)  infixr 3 :: (Task a) (Task b)              -> Task b     | iTask a & iTask b
+(-||)  infixl 3 :: (Task a) (Task b)              -> Task a     | iTask a & iTask b
+(-&&-) infixr 4 :: (Task a) (Task b)              -> Task (a,b) | iTask a & iTask b
+\end{lstlisting}
+
+\section{\acrlongpl{SDS}}
+\Glspl{SDS} are an abstraction over resources that are available in the world
+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.
+
+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.
+
+\begin{lstlisting}[%
+       language=Clean,label={lst:shares},caption={\Gls{SDS} functions}]
+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
+
+\end{lstlisting}