Boomerang: resourceful lenses for string data
Combinators for bidirectional tree transformations: A linguistic approach to the view-update problem