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