All videos

Check embedded DSLs at compile time with Contextual!

March 2, 2017

Interpolated strings, like the familiar s””, provide a convenient way to embed external DSLs in Scala source, allowing you to construct a new value at runtime from a string literal, with Scala expressions substituted within it. But unless you are prepared to implement the interpolator using a macro, the compiler provides no checks on the correctness or well-formedness of the embedded DSL. Contextual is a small open-source library which does the heavy lifting work to make it trivial to write string interpolators which run at compile time, without requiring any macro code.

A string interpolator which parses and checks a DSL at compile-time — with its own custom error-messages — can be written using contextual in just a few lines of ordinary „userspace” code, calling upon parsers, regular expressions or any other means to check the interpolated string. This opens up a smorgasbord of possibilities for adding more compile-time safety to Scala code, not least the ability to introduce your own literal-like types, ranging from checked email addresses or URLs to compile-time-parsed YAML, CSS or even Haskell.