use lenses instead of that horrible dsl