lens-3.8.5: Lenses, Folds and Traversals

Portability Rank2Types provisional Edward Kmett Safe-Inferred

Control.Lens.Equality

Contents

Description

Synopsis

# Type Equality

type Equality s t a b = forall p f. p a (f b) -> p s (f t)Source

A witness that `(a ~ s, b ~ t)`.

Note: Composition with an `Equality` is index-preserving.

type Equality' s a = Equality s s a aSource

A `Simple` `Equality`.

type AnEquality s t a b = Identical a (Mutator b) a (Mutator b) -> Identical a (Mutator b) s (Mutator t)Source

When you see this as an argument to a function, it expects an `Equality`.

type AnEquality' s a = AnEquality s s a aSource

A `Simple` `AnEquality`.

runEq :: AnEquality s t a b -> Identical s t a bSource

Extract a witness of type `Equality`.

substEq :: AnEquality s t a b -> ((s ~ a, t ~ b) => r) -> rSource

Substituting types with `Equality`.

mapEq :: AnEquality s t a b -> f s -> f aSource

We can use `Equality` to do substitution into anything.

fromEq :: AnEquality s t a b -> Equality b a t sSource

`Equality` is symmetric.

simply :: (Overloaded' p f s a -> r) -> Overloaded' p f s a -> rSource

This is an adverb that can be used to modify many other `Lens` combinators to make them require simple lenses, simple traversals, simple prisms or simple isos as input.

# Implementation Details

data Identical a b s t whereSource

Provides witness that `(s ~ a, b ~ t)` holds.

Constructors

 Identical :: Identical a b a b