A type-safe Scala DSL for generating CloudFormation templates