Difference between revisions of "Embedded domain specific language"

From HaskellWiki
Jump to navigation Jump to search
(Added section "Blog articles")
(Added section "Examples of Domain Specific Languages "; renamed section "Blog articles" to "More to read")
Line 24: Line 24:
   
   
  +
== Examples of Domain Specific Languages ==
== Blog articles ==
 
   
  +
* [http://hackage.haskell.org/package/funcmp Functional MetaPost] is a Haskell frontend to the MetaPost language by John Hobby. Users write their graphics as Haskell programs, which then emit MetaPost code that can be compiled into encapsulated PostScript files and smoothly included into e.g. LaTeX.
  +
  +
* [http://hackage.haskell.org/package/orc orc]: Orchestration-style co-ordination EDSL
  +
  +
* [http://hackage.haskell.org/package/diagrams-cairo The diagrams-cairo package]. A full-featured backend for rendering diagrams using the cairo rendering engine. To get started, see Diagrams.Backend.Cairo.CmdLine.
  +
  +
* [http://hackage.haskell.org/package/Workflow Workflow]: library for transparent execution of interruptible computations
  +
  +
* [http://www.yesodweb.com/book/templates#file253-synopsis Hamlet, Julius, Cassius and Lucius] are languages embedded in the [http://www.yesodweb.com/ Yesod framework]
  +
  +
  +
== More to read ==
  +
  +
* [[Research papers/Domain specific languages]]
 
* [http://donsbot.wordpress.com/2007/03/10/practical-haskell-shell-scripting-with-error-handling-and-privilege-separation/ Practical Haskell: shell scripting with error handling and privilege separation]
 
* [http://donsbot.wordpress.com/2007/03/10/practical-haskell-shell-scripting-with-error-handling-and-privilege-separation/ Practical Haskell: shell scripting with error handling and privilege separation]
  +
   
   

Revision as of 21:00, 11 March 2012

Embedded Domain Specific Language means that you embed a Domain specific language in a language like Haskell. E.g. using the Functional MetaPost library you can write Haskell expressions, which are then translated to MetaPost, MetaPost is run on the generated code and the result of MetaPost can be post-processed in Haskell.


Degree of embedding

There are two major degrees of embedding:

  • Shallow embedding: All Haskell operations immediately translate to the target language. E.g. the Haskell expression a+b is translated to a String like "a + b" containing that target language expression.
  • Deep embedding: Haskell operations only build an interim Haskell data structure that reflects the expression tree. E.g. the Haskell expression a+b is translated to the Haskell data structure Add (Var "a") (Var "b"). This structure allows transformations like optimizations before translating to the target language.


Discussion of common problems

Sharing and recursion are common problems when implementing DSLs. Often some kind of observable sharing is requested that requires a deep embedding.


Examples of Domain Specific Languages

  • Functional MetaPost is a Haskell frontend to the MetaPost language by John Hobby. Users write their graphics as Haskell programs, which then emit MetaPost code that can be compiled into encapsulated PostScript files and smoothly included into e.g. LaTeX.
  • orc: Orchestration-style co-ordination EDSL
  • The diagrams-cairo package. A full-featured backend for rendering diagrams using the cairo rendering engine. To get started, see Diagrams.Backend.Cairo.CmdLine.
  • Workflow: library for transparent execution of interruptible computations


More to read