an example we have the simple arithmetic \gls{EDSL} shown in
Listing~\ref{lst:exdeep}.
-\begin{lstlisting}[language=Clean,label={lst:exdeep},%
+\begin{lstlisting}[label={lst:exdeep},%
caption={A minimal deep \gls{EDSL}}]
:: DSL
= LitI Int
the lack of extendability remains a problem. If a language construct is added,
no compile time guarantee is given that all views support it.
-\begin{lstlisting}[language=Clean,label={lst:exdeepgadt},%
+\begin{lstlisting}[label={lst:exdeepgadt},%
caption={A minimal deep \gls{EDSL} using \glspl{GADT}}]
:: DSL a
= LitI Int -> DSL Int
something like the code shown in Listing~\ref{lst:exshallow}. Note that much of
the internals of the language can be hidden using monads.
-\begin{lstlisting}[language=Clean,label={lst:exshallow},%
+\begin{lstlisting}[label={lst:exshallow},%
caption={A minimal shallow \gls{EDSL}}]
:: Env = ... // Some environment
:: DSL a = DSL (Env -> a)
extension is added in a new class, this problem does not arise and views can
choose to implement only parts of the collection of classes.
-\begin{lstlisting}[language=Clean,label={lst:exclassshallow},%
+\begin{lstlisting}[label={lst:exclassshallow},%
caption={A minimal class based shallow \gls{EDSL}}]
:: Env = ... // Some environment
:: Evaluator a = Evaluator (Env -> a)