First class labels that act as bidirectional record fields. The labels are implemented as lenses and are fully composable and can be used to get, set and modify parts of a datatype in a consistent way. The lens datatype, conveniently called `:->', is an instance of the Category type class: meaning it has a proper identity and composition. The library has support for automatically deriving labels from record selectors that start with an underscore. Labels can be used in a purely functional setting or be applied to mutable state in some state monad.