Escher: A language for programming in metaphors