At Fugue, we built our own statically typed DSL, Ludwig, to configure cloud infrastructure in a declarative way.
The DSL relates to the Haskell language in two ways. First, the language’s compiler and toolchain are written in Haskell. Secondly, the DSL is heavily inspired by Haskell. It also borrows interesting features from other languages, such as extensible records with row-type polymorphism and an intuitive YAML-like syntax.
Having a Haskell-inspired functional language certainly made it possible to build powerful abstractions. However, this often come at a price. Many of our prospective users in DevOps have little or no experience in functional programming. This means that they frequently have a hard time understanding how these languages work.
This is a problem for adoption: we want people to look at our examples and immediately feel at home. This talk will focus on how we are trying to achieve that. We will talk about how we constructed the different aspects of the DSL (syntax, type system…) in such a way that anyone who is comfortable editing YAML can pick up the language easily.