úÎ3X0x*      !"#$%&'()%The isomorphism type class is like a * but works in two directions. AThe bijections datatype, an arrow that works in two directions. EAbstract Lens datatype. The getter and setter functions work in some J arrow. Arrows allow for effectful lenses, for example, lenses that might  fail or use state.  FAbstract Point datatype. The getter and setter functions work in some  arrow. DModification as a compositon of a getter and setter. Unfortunately,  +! is needed for this composition. *Create a lens out of a getter and setter. "Get the getter arrow from a lens. "Get the setter arrow from a lens. $Get the modifier arrow from a lens. Make a   diverge in two directions. Lifting s. ,We can diverge s using an isomorphism. -We can diverge es using an isomorphism. .Bijections as categories.     8Pure lens type specialized for pure accessor functions. //Create a pure lens from a getter and a setter. %We expect the following law to hold:   get l (set l a f) == a Or, equivalently:  set l (get l f) f == f Getter for a pure lens. Setter for a pure lens. Modifier for a pure lens. @Get a value out of the state, pointed to by the specified lens. FSet a value somewhere in the state, pointed to by the specified lens.  Alias for  that reads like an assignment. IModify a value with a function somewhere in the state, pointed to by the  specified lens. @Fetch a value pointed to by a lens out of a reader environment. EExecute a computation in a modified environment. The lens is used to  point out the part to modify. 0 JDerive lenses including type signatures for all the record selectors in a  datatype. !HDerive lenses without type signatures for all the record selectors in a  datatype. 12 ! !"KLens type for situations in which the accessor functions can fail. This is G useful, for example, when accessing fields in datatypes with multiple  constructors. 34#KCreate a lens that can fail from a getter and a setter that can themselves  potentially fail. $IGetter for a lens that can fail. When the field to which the lens points & is not accessible the getter returns 5. %ISetter for a lens that can fail. When the field to which the lens points ) is not accessible this function returns 5. &KModifier for a lens that can fail. When the field to which the lens points ) is not accessible this function returns 5. '#Embed a pure lens that points to a 6 field into  a lens that might fail. "#$%&'"#$%&'"#$%&'(FGet a value out of state, pointed to by the specified lens that might F fail. When the lens getter fails this computation will fall back to  7. )EFetch a value, pointed to by a lens that might fail, out of a reader L environment. When the lens getter fails this computation will fall back to  7. ()()() ! !8      !"#$%&'%()*+,-./012%34%35%678 fclabels-1.0Data.Label.AbstractData.Label.PureData.Label.PureM Data.LabelData.Label.MaybeData.Label.MaybeMData.Label.DeriveIsoiso BijectionBijfwbwLensunLensPoint_get_set_modifylensgetsetmodifybimapforliftBij:->getsputs=:askslocalmkLabelsmkLabelsNoTypes:~>embedbaseGHC.BaseFunctor Control.Arrow ArrowApply$fIso~>Bijection $fIso~>Lens$fCategoryBijectionPureLensfclErrorderive1derive MaybeLensrun Data.MaybeNothingMaybe Control.Monadmzero