fclabels- First class accessor labels implemented as lenses.

Safe HaskellSafe-Inferred




Lenses that allow polymorphic updates.


The polymorphic Lens type.

data Lens cat f o Source

Abstract polymorphic lens datatype. The getter and setter functions work in some category. Categories allow for effectful lenses, for example, lenses that might fail or use state.


ArrowApply arr => Category (Lens arr)

Category instance for monomorphic lenses.



:: cat f o


-> cat (cat o i, f) g


-> Lens cat (f -> g) (o -> i) 

Create a lens out of a getter and setter.

point :: Point cat g i f o -> Lens cat (f -> g) (o -> i)Source

Create lens from a Point.

get :: Lens cat (f -> g) (o -> i) -> cat f oSource

Get the getter arrow from a lens.

modify :: Lens cat (f -> g) (o -> i) -> cat (cat o i, f) gSource

Get the modifier arrow from a lens.

set :: Arrow arr => Lens arr (f -> g) (o -> i) -> arr (i, f) gSource

Get the setter arrow from a lens.

iso :: ArrowApply cat => Iso cat f o -> Iso cat g i -> Lens cat (f -> g) (o -> i)Source

Lift a polymorphic isomorphism into a Lens.

The isomorphism needs to be passed in twice to properly unify.

(>-) :: Arrow arr => Lens arr (j -> a) (i -> b) -> Lens arr (f -> g) (o -> i) -> Point arr g j f oSource

Make a Lens output diverge by changing the input of the modifier. The operator can be read as points-to.