Date of this Version
Benjamin C. Pierce, "Adventures in Bidirectional Programming", . November 2007.
Most programs get used in just one direction, from input to output. But sometimes, having computed an output, we need to be able to update this output and then "calculate backwards" to find a correspondingly updated input. The problem of writing such bidirectional transformations — often called lenses — arises in applications across a multitude of domains and has been attacked from many perspectives [1–12, etc.]. See  for a detailed survey.
Date Posted: 14 February 2008