\input{methods.top.tex}

\input{methods.dsl.tex}

\input{methods.arch.tex}

\section{mTasks}
\subsection{\gls{EDSL}}
The \gls{mTask}-\gls{EDSL} contains several classes that need to be implemented
by a type for it to be an \gls{mTask}. For numeric and boolean arithmetic the
classes \texttt{arith} and \texttt{boolExpr} are available and listed in a
shortened version in Listing~\ref{lst:arithbool}. All classes are to be
implemented by types of kind \texttt{*->*->*} a type \texttt{v t p},
respectively a view with a type and the role.

\texttt{lit} lifts a constant to the \gls{mTask} domain. For a type to be a
valid \gls{mTask} type it needs to implement the \texttt{mTaskType} class. The
binary operators work as expected.

\begin{lstlisting}[language=Clean,label={lst:arithbool},
	caption={Basic classes for expressions}]
class mTaskType a | toByteCode, fromByteCode, iTask, TC a

class arith v where
  lit :: t -> v t Expr | mTaskType t
  (+.) infixl 6 :: (v t p) (v t q) -> v t Expr | type, +, zero t & isExpr p & isExpr q
  ...
class boolExpr v where
  (&.) infixr 3 :: (v Bool p) (v Bool q) -> v Bool Expr | isExpr p & isExpr q
  Not           :: (v Bool p) -> v Bool Expr | isExpr p
  ...
  (==.) infix 4 :: (v a p) (v a q) -> v Bool Expr | ==, toCode a & isExpr p & isExpr q
\end{lstlisting}


\subsection{Tasks}

\subsection{Shares}
Shares can live on multiple clients at the same time. For every share created
for an \gls{mTask} a real \gls{SDS} is created that mirrors the value on the
client. All shares currently in use are stored in a system-wide \gls{SDS} in
such a way that the actual share can be retrieved at any moment. All shares
have a unique numeric identifier and an initial value.

\begin{lstlisting}[language=Clean,label={lst:sharespec}, caption={\acrlong{SDS}}]
:: BCValue = E.e: BCValue e & mTaskType e
:: MTaskShareType = MTaskWithShare String | MTaskLens String
:: MTaskShare =
	{withTask :: [String]
	,withDevice :: [String]
	,identifier :: Int
	,realShare :: MTaskShareType
	,value :: BCValue
	}

sdsStore :: Shared [MTaskShare]
\end{lstlisting}
\todo{Do something with the sharetype}

\subsection{Communication}
%\todo{Handshake, device specification sending, spec.c}
%\todo{mTaskDevice class interface}

\section{mTasks}
\subsection{\gls{EDSL}}
\todo{Show the classes}

\subsection{Shares}
\todo{Show the types and why}

Shares are used to store the values 

Shares all have
