  Lenses may be characterised as objects in the category of algebras over a
monad, however they are often understood instead as morphisms, which propagate
updates between systems. Working internally to a category with pullbacks, we
define lenses as simultaneously functors and cofunctors between categories. We
show that lenses may be canonically represented as a particular commuting
triangle of functors, and unify the classical state-based lenses with both
c-lenses and d-lenses in this framework. This new treatment of lenses leads to
considerable simplifications that are important in applications, including a
clear interpretation of lens composition.
