In functional programming we very often find ourselves wanting to use some kind of library that doesn’t really expose a functional API. That’s where embedded domain specific languages come to the rescue. Embedded Domain Specific Languages or eDSLs allow us to build a data structure that represents the expressions of the target language. In this talk we’re going to discover the tagless final approach for building DSLs. We will also compare other styles of DSLs like ADTs and Free Monads and have a look at the respective trade-offs. Finally we will build the purely functional DSL for WebGL using Scala.js and create a small, but awesome 3d app in the browser.