The lens-family-core package

This package provides first class(†) functional references.
In addition to the usual operations of getting, setting and composition, plus integration with the state monad, lens families provide some unique features:

Polymorphic updating

Traversals

Cast projection functions to read-only lenses

Cast "toList" functions to read-only traversals

Cast semantic editor combinators to modify-only traversals.

(†) For optimal first-class support use the lens-family package with rank 2 / rank N polymorphism.
Lens.Family.Clone allows for first-class support of lenses and traversals for those who require Haskell 98.