An exercise in DSL compiler design