Zainab is a functional polyglot. She organizes the London Scala User Group and is an enthusiastic open source contributor.
By day, she solves new and exciting problems in Scala. By night, she solves new and exciting problems in any language she can get her hands on.
This talk explores the domain specific language (DSL) of the deck-building card game Dominion.
We will see how actions in the game have their own language, and can be decomposed into many smaller languages. Using Tagless-Final encoding, we will define these each of these DSLs and compose them to create the larger language.
We will explore two different mechanisms of composition: extension and embedding. Finally, we will enrich the DSL with a type system that enforces game-specific constraints.