MIT licensed by Edward A. Kmett, Oleg Grenrus
Maintained by Oleg Grenrus
This version can be pinned in stack with:aeson-optics-,1543

Module documentation for


The goal of optics-aeson is to provide traversals and prisms for the Aeson library’s Value type, while obeying the Traversal/Prism laws.


  • Drop direct dependency on unordered-containers


Release corresponding to lens-aeson-1.2 API changes.

  • Require aeson-2.0.3.* and optics-core-0.4.1 or greater.

  • Drop support for GHC-8.0

  • Change the types of _Object, key, and members:

    -_Object :: Prism' t (HashMap Text Value)
    +_Object :: Prism' t (KeyMap Value)
    -key :: AsValue t => Text -> AffineTraversal' t Value
    +key :: AsValue t => Key  -> AffineTraversal' t Value
    -members :: AsValue t => IndexedTraversal' Text t Value
    +members :: AsValue t => IndexedTraversal' Key  t Value

    This mirrors similar changes made in aeson-2.0.*, where the type of Object’s field was changed from HashMap Text Value to KeyMap Value.

    The Ixed Value instance changes similarly:

    -type instance Index Value = Text
    +type instance Index Value = Key
  • Remove Primitive and AsPrimitive, since de-emphasized the notion of primitive versus composite JSON values.

    • The AsPrimitive methods (_Value, _String, and _Bool) are now AsValue methods.
    • _Number’s default signature, Bool_, String_, and Null_ now have an AsValue constraint.
  • Add an IsKey class, whose method _Key is an Iso for converting values to and from a Key.


  • Support aeson- add instances for KeyMap.