optics-core-0.1: Optics as an abstract interface: core definitions

Safe HaskellNone
LanguageHaskell2010

Optics.Internal.Optic.Subtyping

Description

Instances to implement the subtyping hierarchy between optics.

This module is intended for internal use only, and may change without warning in subsequent releases.

Synopsis

Documentation

class Is k l where Source #

Subtyping relationship between kinds of optics.

An instance of Is k l means that any Optic k can be used as an Optic l. For example, we have an Is A_Lens A_Traversal instance, but not Is A_Traversal A_Lens.

This class needs instances for all possible combinations of tags.

Methods

implies :: proxy k l p -> (Constraints k p => r) -> Constraints l p => r Source #

Witness of the subtyping relationship.

Instances
Is k k Source #

Every kind of optic can be used as itself.

Instance details

Defined in Optics.Internal.Optic.Subtyping

Methods

implies :: proxy k k p -> (Constraints k p -> r) -> Constraints k p -> r Source #

(TypeError ((ShowType k :<>: Text " cannot be used as ") :<>: ShowType l) :: Constraint) => Is k l Source #

Overlappable instance for a custom type error.

Instance details

Defined in Optics.Internal.Optic.Subtyping

Methods

implies :: proxy k l p -> (Constraints k p -> r) -> Constraints l p -> r Source #

Is A_ReversedLens A_Review Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is An_AffineFold A_Fold Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is A_Getter A_Fold Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Methods

implies :: proxy A_Getter A_Fold p -> (Constraints A_Getter p -> r) -> Constraints A_Fold p -> r Source #

Is A_Getter An_AffineFold Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is A_ReversedPrism A_Fold Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is A_ReversedPrism An_AffineFold Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is A_ReversedPrism A_Getter Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is A_Traversal A_Fold Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Methods

implies :: proxy A_Traversal A_Fold p -> (Constraints A_Traversal p -> r) -> Constraints A_Fold p -> r Source #

Is A_Traversal A_Setter Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is An_AffineTraversal A_Fold Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is An_AffineTraversal An_AffineFold Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is An_AffineTraversal A_Setter Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is An_AffineTraversal A_Traversal Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is A_Prism A_Review Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Methods

implies :: proxy A_Prism A_Review p -> (Constraints A_Prism p -> r) -> Constraints A_Review p -> r Source #

Is A_Prism A_Fold Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Methods

implies :: proxy A_Prism A_Fold p -> (Constraints A_Prism p -> r) -> Constraints A_Fold p -> r Source #

Is A_Prism An_AffineFold Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is A_Prism A_Setter Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Methods

implies :: proxy A_Prism A_Setter p -> (Constraints A_Prism p -> r) -> Constraints A_Setter p -> r Source #

Is A_Prism A_Traversal Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Methods

implies :: proxy A_Prism A_Traversal p -> (Constraints A_Prism p -> r) -> Constraints A_Traversal p -> r Source #

Is A_Prism An_AffineTraversal Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is A_Lens A_Fold Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Methods

implies :: proxy A_Lens A_Fold p -> (Constraints A_Lens p -> r) -> Constraints A_Fold p -> r Source #

Is A_Lens An_AffineFold Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is A_Lens A_Getter Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Methods

implies :: proxy A_Lens A_Getter p -> (Constraints A_Lens p -> r) -> Constraints A_Getter p -> r Source #

Is A_Lens A_Setter Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Methods

implies :: proxy A_Lens A_Setter p -> (Constraints A_Lens p -> r) -> Constraints A_Setter p -> r Source #

Is A_Lens A_Traversal Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Methods

implies :: proxy A_Lens A_Traversal p -> (Constraints A_Lens p -> r) -> Constraints A_Traversal p -> r Source #

Is A_Lens An_AffineTraversal Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is An_Iso A_Review Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Methods

implies :: proxy An_Iso A_Review p -> (Constraints An_Iso p -> r) -> Constraints A_Review p -> r Source #

Is An_Iso A_ReversedLens Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is An_Iso A_Fold Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Methods

implies :: proxy An_Iso A_Fold p -> (Constraints An_Iso p -> r) -> Constraints A_Fold p -> r Source #

Is An_Iso An_AffineFold Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is An_Iso A_Getter Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Methods

implies :: proxy An_Iso A_Getter p -> (Constraints An_Iso p -> r) -> Constraints A_Getter p -> r Source #

Is An_Iso A_ReversedPrism Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is An_Iso A_Setter Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Methods

implies :: proxy An_Iso A_Setter p -> (Constraints An_Iso p -> r) -> Constraints A_Setter p -> r Source #

Is An_Iso A_Traversal Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Methods

implies :: proxy An_Iso A_Traversal p -> (Constraints An_Iso p -> r) -> Constraints A_Traversal p -> r Source #

Is An_Iso An_AffineTraversal Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is An_Iso A_Prism Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Methods

implies :: proxy An_Iso A_Prism p -> (Constraints An_Iso p -> r) -> Constraints A_Prism p -> r Source #

Is An_Iso A_Lens Source # 
Instance details

Defined in Optics.Internal.Optic.Subtyping

Methods

implies :: proxy An_Iso A_Lens p -> (Constraints An_Iso p -> r) -> Constraints A_Lens p -> r Source #

type family Join (k :: *) (l :: *) where ... Source #

Computes the least upper bound of two optics kinds.

Join k l represents the least upper bound of an Optic k and an Optic l. This means in particular that composition of an Optic k and an Optic k will yield an Optic (Join k l).

Equations

Join An_Iso A_ReversedLens = A_ReversedLens 
Join An_Iso A_ReversedPrism = A_ReversedPrism 
Join An_Iso A_Prism = A_Prism 
Join An_Iso A_Review = A_Review 
Join An_Iso A_Lens = A_Lens 
Join An_Iso A_Getter = A_Getter 
Join An_Iso An_AffineTraversal = An_AffineTraversal 
Join An_Iso An_AffineFold = An_AffineFold 
Join An_Iso A_Traversal = A_Traversal 
Join An_Iso A_Fold = A_Fold 
Join An_Iso A_Setter = A_Setter 
Join A_ReversedLens An_Iso = A_ReversedLens 
Join A_ReversedLens A_Prism = A_Review 
Join A_ReversedLens A_Review = A_Review 
Join A_ReversedPrism An_Iso = A_ReversedPrism 
Join A_ReversedPrism A_Prism = An_AffineFold 
Join A_ReversedPrism A_Lens = A_Getter 
Join A_ReversedPrism A_Getter = A_Getter 
Join A_ReversedPrism An_AffineTraversal = An_AffineFold 
Join A_ReversedPrism An_AffineFold = An_AffineFold 
Join A_ReversedPrism A_Traversal = A_Fold 
Join A_ReversedPrism A_Fold = A_Fold 
Join A_Prism An_Iso = A_Prism 
Join A_Prism A_ReversedLens = A_Review 
Join A_Prism A_ReversedPrism = An_AffineFold 
Join A_Prism A_Review = A_Review 
Join A_Prism A_Lens = An_AffineTraversal 
Join A_Prism A_Getter = An_AffineFold 
Join A_Prism An_AffineTraversal = An_AffineTraversal 
Join A_Prism An_AffineFold = An_AffineFold 
Join A_Prism A_Traversal = A_Traversal 
Join A_Prism A_Fold = A_Fold 
Join A_Prism A_Setter = A_Setter 
Join A_Review An_Iso = A_Review 
Join A_Review A_ReversedLens = A_Review 
Join A_Review A_Prism = A_Review 
Join A_Lens An_Iso = A_Lens 
Join A_Lens A_ReversedPrism = A_Getter 
Join A_Lens A_Prism = An_AffineTraversal 
Join A_Lens A_Getter = A_Getter 
Join A_Lens An_AffineTraversal = An_AffineTraversal 
Join A_Lens An_AffineFold = An_AffineFold 
Join A_Lens A_Traversal = A_Traversal 
Join A_Lens A_Fold = A_Fold 
Join A_Lens A_Setter = A_Setter 
Join A_Getter An_Iso = A_Getter 
Join A_Getter A_ReversedPrism = A_Getter 
Join A_Getter A_Prism = An_AffineFold 
Join A_Getter A_Lens = A_Getter 
Join A_Getter An_AffineTraversal = An_AffineFold 
Join A_Getter An_AffineFold = An_AffineFold 
Join A_Getter A_Traversal = A_Fold 
Join A_Getter A_Fold = A_Fold 
Join An_AffineTraversal An_Iso = An_AffineTraversal 
Join An_AffineTraversal A_ReversedPrism = An_AffineFold 
Join An_AffineTraversal A_Prism = An_AffineTraversal 
Join An_AffineTraversal A_Lens = An_AffineTraversal 
Join An_AffineTraversal A_Getter = An_AffineFold 
Join An_AffineTraversal An_AffineFold = An_AffineFold 
Join An_AffineTraversal A_Traversal = A_Traversal 
Join An_AffineTraversal A_Fold = A_Fold 
Join An_AffineTraversal A_Setter = A_Setter 
Join An_AffineFold An_Iso = An_AffineFold 
Join An_AffineFold A_ReversedPrism = An_AffineFold 
Join An_AffineFold A_Prism = An_AffineFold 
Join An_AffineFold A_Lens = An_AffineFold 
Join An_AffineFold A_Getter = An_AffineFold 
Join An_AffineFold An_AffineTraversal = An_AffineFold 
Join An_AffineFold A_Traversal = A_Fold 
Join An_AffineFold A_Fold = A_Fold 
Join A_Traversal An_Iso = A_Traversal 
Join A_Traversal A_ReversedPrism = A_Fold 
Join A_Traversal A_Prism = A_Traversal 
Join A_Traversal A_Lens = A_Traversal 
Join A_Traversal A_Getter = A_Fold 
Join A_Traversal An_AffineTraversal = A_Traversal 
Join A_Traversal An_AffineFold = A_Fold 
Join A_Traversal A_Fold = A_Fold 
Join A_Traversal A_Setter = A_Setter 
Join A_Fold An_Iso = A_Fold 
Join A_Fold A_ReversedPrism = A_Fold 
Join A_Fold A_Prism = A_Fold 
Join A_Fold A_Lens = A_Fold 
Join A_Fold A_Getter = A_Fold 
Join A_Fold An_AffineTraversal = A_Fold 
Join A_Fold An_AffineFold = A_Fold 
Join A_Fold A_Traversal = A_Fold 
Join A_Setter An_Iso = A_Setter 
Join A_Setter A_Prism = A_Setter 
Join A_Setter A_Lens = A_Setter 
Join A_Setter An_AffineTraversal = A_Setter 
Join A_Setter A_Traversal = A_Setter 
Join k k = k 
Join k l = TypeError ((ShowType k :<>: Text " cannot be composed with ") :<>: ShowType l)