An \gls{EDSL} is a language embedded in a host language. \glspl{EDSL} can have
one or more backends or views. Commonly used views are pretty printing,
compiling, simulating, verifying and proving the program.  There are several
techniques available for creating \glspl{EDSL}. They all have their own
advantages and disadvantages in terms of extendability, typedness and view
support. In the following subsections each of the main techniques are briefly
explained.

\section{Deep embedding}
\input{edsl.deep}

\section{Shallow embedding}
\input{edsl.shallow}

\section{Class based shallow embedding}
\input{edsl.class}
