\subsection{EDSLs}
\begin{frame}
\frametitle{Embedded Domain Specific Language}
- \framesubtitle{What is are EDSL}
+ \framesubtitle{What are EDSLs}
\begin{itemize}
\item DSL:\ language for a specific domain
\item E.g., PostScript, VimScript, HTML, \ldots
\item Easy to add views
\item Hard to extend
\item Not type safe
- \pause\item GADT
+ \onslide<4->{
+ \item GADT
+ }
\end{itemize}
\end{block}
}
\item Extendable
\item Type safe
\item Easy to add views
+ \item Phantom types for extra constraints
\end{itemize}
\end{block}
}
:: Evaluator a = Evaluator (Env -> a)
:: PrettyPrinter a = PP String
-class intArith where
+class intArith v 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 ...
+class boolArith v where ...
instance intArith Evaluator where
lit x = Evaluator \e->x
\end{lstlisting}
\end{frame}
+
\begin{frame}[fragile]
- \frametitle{Examples}
+ \frametitle{Tasks and Examples}
+ \begin{lstlisting}[language=Clean]
+class mtask v a where
+ task :: (((v delay r) a -> v MTask Expr) -> In (a->v u p) (Main (v t q)))
+ -> Main (v t q) | ...
+ \end{lstlisting}
+ \pause{}
\begin{lstlisting}[language=Clean]
blink = task \blink=(\x.
IF x