+signatures are shown in Listing~\ref{lst:bytecode}. We only use a subset of the
+original \mTask{} definitions because we do not use the functionality for
+managing tasks.
+
+\subsection{Classes}
+To make the DSL easily extendable with functionality without losing
+extendability of views it as a set of classes that can be implemented by any
+data type.
+
+Arithmetic operations and boolean operators are defined respectively in the
+\CI{arith} and \CI{boolExpr} class. Note that the functions defined by the
+class have some restrictions for specific views. This is basically the
+translation from Clean basic type to the representation in the data type.
+
+\begin{lstlisting}[language=Clean,label={lst:arith}]
+class arith v where
+ lit :: t -> v t Expr | toCode t & toByteCode t
+ (+.) infixl 6 :: (v t p) (v t q) -> v t Expr | type, +, zero t & isExpr p & isExpr q
+ (-.) infixl 6 :: (v t p) (v t q) -> v t Expr | type, -, zero t & isExpr p & isExpr q
+ (*.) infixl 7 :: (v t p) (v t q) -> v t Expr | type, *, zero, one t & isExpr p & isExpr q
+ (/.) infixl 7 :: (v t p) (v t q) -> v t Expr | type, / t & isExpr p & isExpr q
+
+class boolExpr v where
+ (&.) infixr 3 :: (v Bool p) (v Bool q) -> v Bool Expr | isExpr p & isExpr q
+ (|.) infixr 2 :: (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
+ (!=.) infix 4 :: (v a p) (v a q) -> v Bool Expr | ==, toCode a & isExpr p & isExpr q
+ (<.) infix 4 :: (v a p) (v a q) -> v Bool Expr | <, Ord, toCode a & isExpr p & isExpr q
+ (>.) infix 4 :: (v a p) (v a q) -> v Bool Expr | <, Ord, toCode a & isExpr p & isExpr q
+ (<=.) infix 4 :: (v a p) (v a q) -> v Bool Expr | <, Ord, toCode a & isExpr p & isExpr q
+ (>=.) infix 4 :: (v a p) (v a q) -> v Bool Expr | <, Ord, toCode a & isExpr p & isExpr q
+\end{lstlisting}
+