-\section{\acrlong{EDSL}s}
There are several techniques available for creating \glspl{EDSL}. Each of
them have their own advantages and disadvantages such as extendability,
typedness and view support. In the following subsections each of the main
techniques are briefly explained.
-\subsection{Deep embedding}
+\section{Deep embedding}
A deep \gls{EDSL} means that the language is represented as an \gls{ADT}. Views
are functions that transform something to the datatype or the other way around.
As an example we have the simple arithmetic \gls{EDSL} shown in
| E.e: Eq (DSL e) (DSL e) -> DSL Bool & == e
\end{lstlisting}
-\subsection{Shallow embedding}
+\section{Shallow embedding}
In a shallowly \gls{EDSL} all language constructs are expressed as functions in
the host language. An evaluator view for our example language then looks
something like the code shown in Listing~\ref{lst:exshallow}. Note that much of
implement all views. This makes it slow for multiple views and complex to
implement.
-\subsection{Class based shallow embedding}
+\section{Class based shallow embedding}
The third type of embedding is called class based shallow embedding and has the
best of both shallow and deep embedding. In class based shallow embedding the
language constructs are defined as type classes. The same language is shown