  We present an evaluation update (or simply, update) algorithm for a
full-featured functional programming language, which synthesizes program
changes based on output changes. Intuitively, the update algorithm retraces the
steps of the original evaluation, rewriting the program as needed to reconcile
differences between the original and updated output values. Our approach,
furthermore, allows expert users to define custom lenses that augment the
update algorithm with more advanced or domain-specific program updates.
  To demonstrate the utility of evaluation update, we implement the algorithm
in Sketch-n-Sketch, a novel direct manipulation programming system for
generating HTML documents. In Sketch-n-Sketch, the user writes an ML-style
functional program to generate HTML output. When the user directly manipulates
the output using a graphical user interface, the update algorithm reconciles
the changes. We evaluate bidirectional evaluation in Sketch-n-Sketch by
authoring ten examples comprising approximately 1400 lines of code in total.
These examples demonstrate how a variety of HTML documents and applications can
be developed and edited interactively in Sketch-n-Sketch, mitigating the
tedious edit-run-view cycle in traditional programming environments.
