[Haskell-cafe] What *is* a DSL?

Günther Schmidt gue.schmidt at web.de
Wed Oct 7 11:42:16 EDT 2009

Hi Joe
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?
> Also,
> "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  
> them.

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 mailing list