J. Bracker and A. Gill, “Sunroof: A monadic DSL for generating JavaScript,” in Practical Aspects of Declarative Languages (M. Flatt and H.-F. Guo, eds.), vol. 8324 of Lecture Notes in Computer Science, pp. 65–80, Springer International Publishing, 2014.



Sunroof is a Haskell-hosted Domain Specific Language (DSL) for generating JavaScript. The central feature of Sunroof is a JavaScript monad, which, like the Haskell IO-monad, allows access to external resources, but specifically JavaScript resources. As such, Sunroof is primarily a feature-rich foreign-function API to the browser’s JavaScript engine, and all the browser-specific functionality, including HTML-based rendering, event handling, and drawing to the HTML5 canvas element.

In this paper, we give the design and implementation of Sunroof. Using monadic reification, we generate JavaScript from a deep embedding of the JavaScript monad. The Sunroof DSL has the feel of native Haskell, with a simple Haskell-based type schema to guide the Sunroof programmer. Furthermore, because we are generating code, we can offer Haskell-style concurrency patterns, such as MVars and Channels. In combination with a web-services package, the Sunroof DSL offers a robust platform to build interactive web applications.


  year = {2014},
  isbn = {978-3-319-04131-5},
  booktitle = {Practical Aspects of Declarative Languages},
  volume = {8324},
  series = {Lecture Notes in Computer Science},
  editor = {Flatt, Matthew and Guo, Hai-Feng},
  doi = {10.1007/978-3-319-04132-2_5},
  title = {Sunroof: A Monadic {DSL} for Generating {J}ava{S}cript},
  publisher = {Springer International Publishing},
  keywords = {DSLs; JavaScript; Web Technologies; Cloud Computing},
  author = {Bracker, Jan and Gill, Andy},
  pages = {65-80},