+
+ \placeintermezzo{}{
+ \defref{EDSL}
+ \startframedtext[width=8.5cm,background=box,frame=no]
+ \startalignment[center]
+ {\tfa Embedded domain-specific languages (\small{EDSL})}
+ \stopalignment
+ \blank[medium]
+
+ \startcitedquotation[deursen00]
+ A domain-specific language (\small{DSL}) is a programming language
+ or executable specification language that offers, through
+ appropriate notations and abstractions, expressive power focused
+ on, and usually restricted to, a particular problem domain.
+ \stopcitedquotation
+
+ An embedded \small{DSL} is a \small{DSL} that is embedded in
+ another language. Haskell is commonly used to embed \small{DSL}s
+ in, which typically means a number of Haskell functions and types
+ are made available that can be called to construct a large value
+ of some domain-specific datatype (\eg, a circuit datatype). This
+ generated datatype can then be processed further by the
+ \small{EDSL} \quote{compiler} (which runs in the same environment
+ as the \small{EDSL} itself. The embedded language is then a, mostly
+ applicative, subset of Haskell where the library functions are the
+ primitives. Sometimes advanced Haskell features such as
+ polymorphism, higher-order values or type classes can be used in
+ the embedded language. \cite[hudak96]
+
+ For an \small{EDSL}, the definitions of compile-time and run-time
+ are typically fuzzy (and thus hard to define here), since the
+ \small{EDSL} \quote{compiler} is usually compiled by the same
+ Haskell compiler as the \small{EDSL} program itself.
+ \stopframedtext
+ }
+