+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}