Boomerang is a programming language for writing bidirectional transformations called lenses. Every Boomerang program describes two functions: when read from left to right, it describes an ordinary function that maps inputs to outputs; when read from right to left, it describes a function that “computes backwards”, mapping a modified output, together with the original input, to a modified input.