composite-lens-extra-0.0.1.0: Extra lens functions for composite.
Safe HaskellNone
LanguageHaskell2010

Composite.Lens.Extra

Synopsis

Documentation

pattern (:!:) :: forall s f rs a. Contravariant f => f a -> Rec f rs -> Rec f ((s :-> a) ': rs) infixr 5 Source #

Bidirectional pattern matching the first field of a record using :-> values and any contavariant functor.

This pattern is bidirectional meaning you can use it either as a pattern or a constructor, e.g.

  let rec = Predicate even :!: Predicate (even . length) :!: RNil
      Predicate foo :!: Predicate bar :!: RNil = rec

Since: 0.0.1.0

rlens'' :: (Contravariant f, Functor g, RElem (s :-> a) rs) => proxy (s :-> a) -> (f a -> g (f a)) -> Rec f rs -> g (Rec f rs) Source #

Lens to a particular field of a record using a contravariant functor.

For example, given:

   type FFoo = "foo" :-> Int
   type FBar = "bar" :-> String
   fBar_ :: Proxy FBar
   fBar_ = Proxy

   rec :: Rec Predicate '[FFoo, FBar]
   rec = Predicate even :!: Predicate (even . length) :!: Nil
 

Then:

   view (rlens'' fBar_)                           rec == Predicate even
   set  (rlens'' fBar_) Predicate (odd . length)  rec == Predicate even :!: Predicate (odd . length) :!: Nil
   over (rlens'' fBar_) (contramap show)          rec == Predicate even :!: Predicate (odd . length . show) :!: Nil
 

Since: 0.0.1.0

rlensS :: forall p p' s s' a b g rs rs'. (p ~ (s :-> a), p' ~ (s' :-> b), RecElem Rec (s :-> a) (s' :-> b) rs rs' (RIndex (s :-> a) rs), Functor g) => (a -> g b) -> Record rs -> g (Record rs') Source #

Type changing lens over a Record field.

Since: 0.0.1.0

rlensS' :: forall p p' s s' a b f g rs rs'. (p ~ (s :-> a), p' ~ (s' :-> b), RecElem Rec (s :-> a) (s' :-> b) rs rs' (RIndex (s :-> a) rs), Functor f, Functor g) => (f a -> g (f b)) -> Rec f rs -> g (Rec f rs') Source #

Type changing lens over a `Rec f` (Covariant).

Since: 0.0.1.0

rlensS'' :: forall p p' s s' a b f g rs rs'. (p ~ (s :-> a), p' ~ (s' :-> b), RecElem Rec (s :-> a) (s' :-> b) rs rs' (RIndex (s :-> a) rs), Contravariant f, Functor g) => (f a -> g (f b)) -> Rec f rs -> g (Rec f rs') Source #

Type changing lens over a `Rec f` (Contravariant).

Since: 0.0.1.0