fclabels-2.0.3: First class accessor labels implemented as lenses.

Safe HaskellSafe
LanguageHaskell98

Data.Label.Poly

Contents

Description

Lenses that allow polymorphic updates.

Synopsis

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.

Instances

ArrowApply arr => Category * (Lens arr) Source

Category instance for monomorphic lenses.

lens Source

Arguments

:: cat f o

Getter.

-> cat (cat o i, f) g

Modifier.

-> 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 o Source

Get the getter arrow from a lens.

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

Get the modifier arrow from a lens.

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

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 o infix 7 Source

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

for :: Arrow arr => Lens arr (j -> a) (i -> b) -> Lens arr (f -> g) (o -> i) -> Point arr g j f o infix 7 Source

Non-operator version of >-, since it clashes with an operator when the Arrows language extension is used.