-\section{mTask}
-\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.
+Some functionality of the original \gls{mTask}-\gls{EDSL} will not be used in
+this extension \gls{EDSL}. Conversely, some functionality needed was not
+available in the existing \gls{EDSL}. Due to the nature of class based shallow
+embedding this obstacle is very easy to solve. A type housing the \gls{EDSL}
+does not have to implement all the available classes. Moreover, classes can be
+added at will without interfering with the existing views.
-\begin{lstlisting}[language=Clean,label={lst:arithbool},
- caption={Basic classes for expressions}]
+\section{Bytecode compilation view}
+The \glspl{mTask} are sent to the device in bytecode and are saved in the
+memory of the device. To compile the \gls{EDSL} code to bytecode a \gls{RWST}
+is used. The \gls{RWST} is a state transformer stacked on a \emph{Reader} monad
+and a \emph{Writer} monad. In this case the transformer part is not used.
+However, this can be done to add for example better runtime error handling.
+
+\begin{lstlisting}[language=Clean]
+:: ByteCode a p = BC (RWS () [BC] BCState ())
+:: BCValue = E.e: BCValue e & mTaskType, TC e
+:: BCShare = {
+ sdsi :: Int,
+ sdsval :: BCValue
+ }
+:: BCState = {
+ freshl :: [Int],
+ freshs :: [Int],
+ sdss :: [BCShare]
+ }
+
+class toByteCode a :: a -> String
+class fromByteCode a :: String -> a
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
+instance toByteCode Int, ... , UserLED, BCValue
+instance fromByteCode Int, ... , UserLED, BCValue
+
+instance arith ByteCode
+...
+instance serial ByteCode
\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
+
+\section{Bytecode compilation view for \gls{mTask}}
+Compilation to bytecode
+
+\subsection{Backend}
+\todo{Aanpassingen
+aan de mTask DSL}
+
+\section{Semantics}
+
+\todo{Uitleggen wat het systeem precies doet}
+