\end{itemize}
\end{frame}
-\begin{frame}
- \frametitle{Embedded Domain Specific Language (2)}
- \framesubtitle{Embedding techniques}
- \begin{block}{Deep}
- \end{block}
+\begin{frame}[fragile]
+ \frametitle{Deep embedding}
+ \begin{columns}[t]
+ \column{.49\textwidth}
+ \begin{block}{What is deep embedding}
+ \begin{itemize}
+ \item The EDSL as an ADT
+ \item A view is a function transforming the ADT
+ \end{itemize}
+ \end{block}
+ \column{.49\textwidth}
+ \pause{}
+ \begin{lstlisting}
+:: DSL = LitI Int | LitB Bool
+ | Var String | Plus DSL DSL
+ | Minus DSL DSL | And DSL DSL
+ | Eq DSL
- \begin{block}{Shallow}
+eval :: DSL Env -> Env
+pprint :: DSL -> String
+ \end{lstlisting}
+ \end{columns}
+ \pause{}
+ \begin{block}{Properties}
+ \begin{itemize}
+ \item Easy to add views
+ \item Hard to extend
+ \item Not type safe
+ \pause\item GADT
+ \end{itemize}
\end{block}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Shallow embedding}
+ \begin{columns}[t]
+ \column{.49\textwidth}
+ \begin{block}{What is shallow embedding}
+ \begin{itemize}
+ \item The EDSL as a function
+ \item The view is embedded in the function
+ \end{itemize}
+ \end{block}
+ \pause{}
+ \column{.49\textwidth}
+ \begin{lstlisting}
+:: Env = ...
+:: DSL a = DSL (Env -> a)
+
+Lit :: a -> DSL a
+Lit x = \e -> x
+
+Var :: String -> DSL Int
+Var i = \e -> retrEnv e i
- \begin{block}{Class based shallow}
+Plus :: (DSL Int) (DSL Int) -> DSL Int
+Plus x y = \e -> x e + y e
+ \end{lstlisting}
+ \end{columns}
+ \pause{}
+ \begin{block}{Properties}
+ \begin{itemize}
+ \item Difficult to add views
+ \item Easy to extend
+ \item Type safe
+ \end{itemize}
\end{block}
\end{frame}
-\begin{frame}
- \frametitle{Embedded Domain Specific Language (2)}
- \framesubtitle{Shallow Embedding}
-\end{frame}
+\begin{frame}[fragile]
+ \frametitle{Class based shallow embedding}
+ \begin{columns}[t]
+ \column{.49\textwidth}
+ \onslide<1->{
+ \begin{block}{The best of both worlds}
+ \begin{itemize}
+ \item The EDSL is a collection of classes
+ \item Views are types implementing a subset
+ \end{itemize}
+ \end{block}
+ }
+ \onslide<3->{
+ \begin{block}{Properties}
+ \begin{itemize}
+ \item Extendable
+ \item Type safe
+ \item Easy to add views
+ \end{itemize}
+ \end{block}
+ }
+ \column{.49\textwidth}
+ \begin{onlyenv}<2->
+ \begin{lstlisting}
+:: Env = ...
+:: Evaluator a = Evaluator (Env -> a)
+:: PrettyPrinter a = PP String
-\begin{frame}
- \frametitle{Embedded Domain Specific Language (3)}
- \framesubtitle{Class Based Shallow Embedding}
+class intArith where
+ lit :: t -> v t | toString t
+ add :: (v t) (v t) -> (v t) | + t
+ minus :: (v t) (v t) -> (v t) | - t
+
+class boolArith where ...
+
+instance intArith Evaluator where
+ lit x = Evaluator \e->x
+ add x y = Evaluator ...
+ ...
+
+instance intArith PrettyPrinter where
+ lit x = PP $ toString x
+ add x y = PP $ x +++ "+" +++ y
+ ...
+ \end{lstlisting}
+ \end{onlyenv}
+ \end{columns}
\end{frame}
\subsection{mTask}
\begin{block}{What is mTask}
\begin{itemize}
\item EDSL
- \item Generates C code
- \item Arduino
+ \item Arduino C++ generation, iTasks simulation
\end{itemize}
\end{block}
\item Extendable
\item \ldots\pause{} but\ldots
\item No interaction
- \item Compilation
+ \item Compilation requires reprogramming
\end{itemize}
\end{block}
\end{frame}