[Haskell-cafe] What *is* a DSL?
gue.schmidt at web.de
Wed Oct 7 11:42:16 EDT 2009
Am 07.10.2009, 17:26 Uhr, schrieb Joe Fredette <jfredett at gmail.com>:
> Let me add to this, as I've used the term "DSL" without (*gasp*) fully
> understanding it before.
Welcome to the club then! :)
> In addition to "What is a DSL", I'd like to ask:
> "How is a DSL different from an API?" -- in the sense that an API is a
> set of, say, combinators to filter email + a monad in which to combine
> them. Or even the API in the more traditional sense of the set of
> exposed operations on a given type. Is an API a kind of DSL? A kind of
> Embedded DSL?
> "What is the difference between an EDSL and a DSL?" -- I've got a vague
> intuition of the difference, but am unsure how to particularly delineate
Well that part I think I can answer.
An EDSL is when you don't start from scratch. IE. when you do not, let's
say build a compiler that parses a String and then eventually "executes"
Rather you define the "Terms", ie. primitive Terms (Terminals) and
Non-Terminals with the means of the "host" language (Haskell in my case).
> Also, any good introductory papers/books/other resources on DSLs and how
> to design, build and use them would be _lovely_.
Well as a book I could recommend Paul Hudaks "School of Expression". The
way he abstracts is by means of using a DSL. He assembles objects,
Geometrics Regions, Triangles, circles, squares etc. combines them with
the help of functions and *later* evaluates them. Now he is definatly
using a DSL here, but that is by no means the only way of implementing the
abstract through a DSL. Once that has sunk in I suggest papers from Oleg
and others on the subject, but to get started SOE would be a good idea.
More information about the Haskell-Cafe