What is DSL?
- Domain consists of structured data and interfaces
- Extract common code and higher-order functions into 'interpreter'
- All implementation-specific code and data is now input data to interpreter
- Build backing objects to hold these inputs
- DSLs allow you to build these data in a typesafe way.
- Kotlin allows us to build DSLs