{-# LANGUAGE CPP #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE Rank2Types #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE KindSignatures #-}
module Control.Lens.Type
(
Equality, Equality', As
, Iso, Iso'
, Prism , Prism'
, Lens, Lens'
, Traversal, Traversal'
, Traversal1, Traversal1'
, Setter, Setter'
, Getter, Fold
, Fold1
, Action, MonadicFold, RelevantMonadicFold
, IndexedLens, IndexedLens'
, IndexedTraversal, IndexedTraversal'
, IndexedTraversal1, IndexedTraversal1'
, IndexedSetter, IndexedSetter'
, IndexedGetter, IndexedFold
, IndexedFold1
, IndexedAction, IndexedMonadicFold
, IndexedRelevantMonadicFold
, IndexPreservingLens, IndexPreservingLens'
, IndexPreservingTraversal, IndexPreservingTraversal'
, IndexPreservingTraversal1, IndexPreservingTraversal1'
, IndexPreservingSetter, IndexPreservingSetter'
, IndexPreservingGetter, IndexPreservingFold
, IndexPreservingFold1
, IndexPreservingAction, IndexPreservingMonadicFold
, IndexPreservingRelevantMonadicFold
, Simple
, LensLike, LensLike'
, Over, Over'
, IndexedLensLike, IndexedLensLike'
, Optical, Optical'
, Optic, Optic'
) where
import Control.Applicative
import Control.Lens.Internal.Action
import Control.Lens.Internal.Setter
import Control.Lens.Internal.Indexed
import Data.Functor.Contravariant
import Data.Functor.Apply
import Data.Profunctor
type Lens s t a b = forall f. Functor f => (a -> f b) -> s -> f t
type Lens' s a = Lens s s a a
type IndexedLens i s t a b = forall f p. (Indexable i p, Functor f) => p a (f b) -> s -> f t
type IndexedLens' i s a = IndexedLens i s s a a
type IndexPreservingLens s t a b = forall p f. (Conjoined p, Functor f) => p a (f b) -> p s (f t)
type IndexPreservingLens' s a = IndexPreservingLens s s a a
type Traversal s t a b = forall f. Applicative f => (a -> f b) -> s -> f t
type Traversal' s a = Traversal s s a a
type Traversal1 s t a b = forall f. Apply f => (a -> f b) -> s -> f t
type Traversal1' s a = Traversal1 s s a a
type IndexedTraversal i s t a b = forall p f. (Indexable i p, Applicative f) => p a (f b) -> s -> f t
type IndexedTraversal' i s a = IndexedTraversal i s s a a
type IndexedTraversal1 i s t a b = forall p f. (Indexable i p, Apply f) => p a (f b) -> s -> f t
type IndexedTraversal1' i s a = IndexedTraversal1 i s s a a
type IndexPreservingTraversal s t a b = forall p f. (Conjoined p, Applicative f) => p a (f b) -> p s (f t)
type IndexPreservingTraversal' s a = IndexPreservingTraversal s s a a
type IndexPreservingTraversal1 s t a b = forall p f. (Conjoined p, Apply f) => p a (f b) -> p s (f t)
type IndexPreservingTraversal1' s a = IndexPreservingTraversal1 s s a a
type Setter s t a b = forall f. Settable f => (a -> f b) -> s -> f t
type Setter' s a = Setter s s a a
type IndexedSetter i s t a b = forall f p.
(Indexable i p, Settable f) => p a (f b) -> s -> f t
type IndexedSetter' i s a = IndexedSetter i s s a a
type IndexPreservingSetter s t a b = forall p f. (Conjoined p, Settable f) => p a (f b) -> p s (f t)
type IndexPreservingSetter' s a = IndexPreservingSetter s s a a
type Iso s t a b = forall p f. (Profunctor p, Functor f) => p a (f b) -> p s (f t)
type Iso' s a = Iso s s a a
type Prism s t a b = forall p f. (Choice p, Applicative f) => p a (f b) -> p s (f t)
type Prism' s a = Prism s s a a
type Equality s t a b = forall p (f :: * -> *). p a (f b) -> p s (f t)
type Equality' s a = Equality s s a a
type As a = Equality' a a
type Getter s a = forall f. (Contravariant f, Functor f) => (a -> f a) -> s -> f s
type IndexedGetter i s a = forall p f. (Indexable i p, Contravariant f, Functor f) => p a (f a) -> s -> f s
type IndexPreservingGetter s a = forall p f. (Conjoined p, Contravariant f, Functor f) => p a (f a) -> p s (f s)
type Fold s a = forall f. (Contravariant f, Applicative f) => (a -> f a) -> s -> f s
type IndexedFold i s a = forall p f. (Indexable i p, Contravariant f, Applicative f) => p a (f a) -> s -> f s
type IndexPreservingFold s a = forall p f. (Conjoined p, Contravariant f, Applicative f) => p a (f a) -> p s (f s)
type Fold1 s a = forall f. (Contravariant f, Apply f) => (a -> f a) -> s -> f s
type IndexedFold1 i s a = forall p f. (Indexable i p, Contravariant f, Apply f) => p a (f a) -> s -> f s
type IndexPreservingFold1 s a = forall p f. (Conjoined p, Contravariant f, Apply f) => p a (f a) -> p s (f s)
type Action m s a = forall f r. Effective m r f => (a -> f a) -> s -> f s
type IndexedAction i m s a = forall p f r. (Indexable i p, Effective m r f) => p a (f a) -> s -> f s
type IndexPreservingAction m s a = forall p f r. (Conjoined p, Effective m r f) => p a (f a) -> p s (f s)
type MonadicFold m s a = forall f r. (Effective m r f, Applicative f) => (a -> f a) -> s -> f s
type RelevantMonadicFold m s a = forall f r. (Effective m r f, Apply f) => (a -> f a) -> s -> f s
type IndexedMonadicFold i m s a = forall p f r. (Indexable i p, Effective m r f, Applicative f) => p a (f a) -> s -> f s
type IndexedRelevantMonadicFold i m s a = forall p f r. (Indexable i p, Effective m r f, Apply f) => p a (f a) -> s -> f s
type IndexPreservingMonadicFold m s a = forall p f r. (Conjoined p, Effective m r f, Applicative f) => p a (f a) -> p s (f s)
type IndexPreservingRelevantMonadicFold m s a = forall p f r. (Conjoined p, Effective m r f, Apply f) => p a (f a) -> p s (f s)
type Simple f s a = f s s a a
type Optic p f s t a b = p a (f b) -> p s (f t)
type Optic' p f s a = Optic p f s s a a
type Optical p q f s t a b = p a (f b) -> q s (f t)
type Optical' p q f s a = Optical p q f s s a a
type LensLike f s t a b = (a -> f b) -> s -> f t
type LensLike' f s a = LensLike f s s a a
type IndexedLensLike i f s t a b = forall p. Indexable i p => p a (f b) -> s -> f t
type IndexedLensLike' i f s a = IndexedLensLike i f s s a a
type Over p f s t a b = p a (f b) -> s -> f t
type Over' p f s a = Over p f s s a a