\blank[medium]
\startcitedquotation[deursen00]
- A domain-specific language (\small{DSL}) is a program-
- ming language or executable specification language
- that offers, through appropriate notations and ab-
- stractions, expressive power focused on, and usu-
- ally restricted to, a particular problem domain.
+ 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
polymorphism, higher-order values or type classes can be used in
the embedded language. \cite[hudak96]
- For an \small{EDSL}, the definitions of compiletime and runtime
+ 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.
define limitations on values, making it easier to find violations
and thus bugs.
\item Easy to process. Functional languages have nice properties like
- purity \refdef{purity} and single binding behaviour, which make it easy
+ purity \refdef{purity} and single binding behavior, which make it easy
to apply program transformations and optimizations and could potentially
simplify program verification.
\stopitemize
generate parts of this \small{AST}.
Template Haskell is a very powerful, but also complex mechanism.
- It was inteded to simplify the generation of some repetive pieces
+ It was intended to simplify the generation of some repetitive pieces
of code, but its introspection features have inspired all sorts of
applications, such as hardware description compilers.
\stopframedtext
specific languages. For example, an \hs{if} or \hs{case}
expression is typically executed once when the Haskell description
is processed and only the result is reflected in the generated
- datastructure (and thus in the final program). In Lava, for
+ data-structure (and thus in the final program). In Lava, for
example, conditional assignment can only be described by using
explicit multiplexer components, not using any of Haskell's
compact mechanisms (such as \hs{case} expressions or pattern