lens-4.15.4: Lenses, Folds and Traversals

Control.Lens.Internal.Bazaar

Description

Synopsis

# Documentation

class Profunctor p => Bizarre p w | w -> p where Source #

This class is used to run the various Bazaar variants used in this library.

Minimal complete definition

bazaar

Methods

bazaar :: Applicative f => p a (f b) -> w a b t -> f t Source #

Instances
 Profunctor p => Bizarre p (Bazaar p) Source # Instance detailsMethodsbazaar :: Applicative f => p a (f b) -> Bazaar p a b t -> f t Source # Profunctor p => Bizarre p (BazaarT p g) Source # Instance detailsMethodsbazaar :: Applicative f => p a (f b) -> BazaarT p g a b t -> f t Source # Corepresentable p => Bizarre p (TakingWhile p g) Source # Instance detailsMethodsbazaar :: Applicative f => p a (f b) -> TakingWhile p g a b t -> f t Source # Source # Instance detailsMethodsbazaar :: Applicative f => Indexed Int a (f b) -> Mafic a b t -> f t Source # Bizarre (Indexed i) (Molten i) Source # Instance detailsMethodsbazaar :: Applicative f => Indexed i a (f b) -> Molten i a b t -> f t Source #

newtype Bazaar p a b t Source #

This is used to characterize a Traversal.

a.k.a. indexed Cartesian store comonad, indexed Kleene store comonad, or an indexed FunList.

A Bazaar is like a Traversal that has already been applied to some structure.

Where a Context a b t holds an a and a function from b to t, a Bazaar a b t holds N as and a function from N bs to t, (where N might be infinite).

Mnemonically, a Bazaar holds many stores and you can easily add more.

This is a final encoding of Bazaar.

Constructors

 Bazaar FieldsrunBazaar :: forall f. Applicative f => p a (f b) -> f t
Instances
 Corepresentable p => Sellable p (Bazaar p) Source # Instance detailsMethodssell :: p a (Bazaar p a b b) Source # Profunctor p => Bizarre p (Bazaar p) Source # Instance detailsMethodsbazaar :: Applicative f => p a (f b) -> Bazaar p a b t -> f t Source # Source # Instance detailsMethodsiextract :: Bazaar p a a t -> t Source #iduplicate :: Bazaar p a c t -> Bazaar p a b (Bazaar p b c t) Source #iextend :: (Bazaar p b c t -> r) -> Bazaar p a c t -> Bazaar p a b r Source # Source # Instance detailsMethodsifmap :: (s -> t) -> Bazaar p a b s -> Bazaar p a b t Source # Functor (Bazaar p a b) Source # Instance detailsMethodsfmap :: (a0 -> b0) -> Bazaar p a b a0 -> Bazaar p a b b0 #(<$) :: a0 -> Bazaar p a b b0 -> Bazaar p a b a0 # Applicative (Bazaar p a b) Source # Instance detailsMethodspure :: a0 -> Bazaar p a b a0 #(<*>) :: Bazaar p a b (a0 -> b0) -> Bazaar p a b a0 -> Bazaar p a b b0 #liftA2 :: (a0 -> b0 -> c) -> Bazaar p a b a0 -> Bazaar p a b b0 -> Bazaar p a b c #(*>) :: Bazaar p a b a0 -> Bazaar p a b b0 -> Bazaar p a b b0 #(<*) :: Bazaar p a b a0 -> Bazaar p a b b0 -> Bazaar p a b a0 # ((~) * a b, Conjoined p) => Comonad (Bazaar p a b) Source # Instance detailsMethodsextract :: Bazaar p a b a0 -> a0 #duplicate :: Bazaar p a b a0 -> Bazaar p a b (Bazaar p a b a0) #extend :: (Bazaar p a b a0 -> b0) -> Bazaar p a b a0 -> Bazaar p a b b0 # ((~) * a b, Conjoined p) => ComonadApply (Bazaar p a b) Source # Instance detailsMethods(<@>) :: Bazaar p a b (a0 -> b0) -> Bazaar p a b a0 -> Bazaar p a b b0 #(@>) :: Bazaar p a b a0 -> Bazaar p a b b0 -> Bazaar p a b b0 #(<@) :: Bazaar p a b a0 -> Bazaar p a b b0 -> Bazaar p a b a0 # Apply (Bazaar p a b) Source # Instance detailsMethods(<.>) :: Bazaar p a b (a0 -> b0) -> Bazaar p a b a0 -> Bazaar p a b b0 #(.>) :: Bazaar p a b a0 -> Bazaar p a b b0 -> Bazaar p a b b0 #(<.) :: Bazaar p a b a0 -> Bazaar p a b b0 -> Bazaar p a b a0 # type Bazaar' p a = Bazaar p a a Source # This alias is helpful when it comes to reducing repetition in type signatures. type Bazaar' p a t = Bazaar p a a t  newtype BazaarT p (g :: * -> *) a b t Source # BazaarT is like Bazaar, except that it provides a questionable Contravariant instance To protect this instance it relies on the soundness of another Contravariant type, and usage conventions. For example. This lets us write a suitably polymorphic and lazy taking, but there must be a better way! Constructors  BazaarT FieldsrunBazaarT :: forall f. Applicative f => p a (f b) -> f t Instances  Corepresentable p => Sellable p (BazaarT p g) Source # Instance detailsMethodssell :: p a (BazaarT p g a b b) Source # Profunctor p => Bizarre p (BazaarT p g) Source # Instance detailsMethodsbazaar :: Applicative f => p a (f b) -> BazaarT p g a b t -> f t Source # Conjoined p => IndexedComonad (BazaarT p g) Source # Instance detailsMethodsiextract :: BazaarT p g a a t -> t Source #iduplicate :: BazaarT p g a c t -> BazaarT p g a b (BazaarT p g b c t) Source #iextend :: (BazaarT p g b c t -> r) -> BazaarT p g a c t -> BazaarT p g a b r Source # Source # Instance detailsMethodsifmap :: (s -> t) -> BazaarT p g a b s -> BazaarT p g a b t Source # Functor (BazaarT p g a b) Source # Instance detailsMethodsfmap :: (a0 -> b0) -> BazaarT p g a b a0 -> BazaarT p g a b b0 #(<$) :: a0 -> BazaarT p g a b b0 -> BazaarT p g a b a0 # Applicative (BazaarT p g a b) Source # Instance detailsMethodspure :: a0 -> BazaarT p g a b a0 #(<*>) :: BazaarT p g a b (a0 -> b0) -> BazaarT p g a b a0 -> BazaarT p g a b b0 #liftA2 :: (a0 -> b0 -> c) -> BazaarT p g a b a0 -> BazaarT p g a b b0 -> BazaarT p g a b c #(*>) :: BazaarT p g a b a0 -> BazaarT p g a b b0 -> BazaarT p g a b b0 #(<*) :: BazaarT p g a b a0 -> BazaarT p g a b b0 -> BazaarT p g a b a0 # (Profunctor p, Contravariant g) => Contravariant (BazaarT p g a b) Source # Instance detailsMethodscontramap :: (a0 -> b0) -> BazaarT p g a b b0 -> BazaarT p g a b a0 #(>$) :: b0 -> BazaarT p g a b b0 -> BazaarT p g a b a0 # ((~) * a b, Conjoined p) => Comonad (BazaarT p g a b) Source # Instance detailsMethodsextract :: BazaarT p g a b a0 -> a0 #duplicate :: BazaarT p g a b a0 -> BazaarT p g a b (BazaarT p g a b a0) #extend :: (BazaarT p g a b a0 -> b0) -> BazaarT p g a b a0 -> BazaarT p g a b b0 # ((~) * a b, Conjoined p) => ComonadApply (BazaarT p g a b) Source # Instance detailsMethods(<@>) :: BazaarT p g a b (a0 -> b0) -> BazaarT p g a b a0 -> BazaarT p g a b b0 #(@>) :: BazaarT p g a b a0 -> BazaarT p g a b b0 -> BazaarT p g a b b0 #(<@) :: BazaarT p g a b a0 -> BazaarT p g a b b0 -> BazaarT p g a b a0 # Apply (BazaarT p g a b) Source # Instance detailsMethods(<.>) :: BazaarT p g a b (a0 -> b0) -> BazaarT p g a b a0 -> BazaarT p g a b b0 #(.>) :: BazaarT p g a b a0 -> BazaarT p g a b b0 -> BazaarT p g a b b0 #(<.) :: BazaarT p g a b a0 -> BazaarT p g a b b0 -> BazaarT p g a b a0 # Contravariant g => Semigroup (BazaarT p g a b t) Source # Instance detailsMethods(<>) :: BazaarT p g a b t -> BazaarT p g a b t -> BazaarT p g a b t #sconcat :: NonEmpty (BazaarT p g a b t) -> BazaarT p g a b t #stimes :: Integral b0 => b0 -> BazaarT p g a b t -> BazaarT p g a b t # Contravariant g => Monoid (BazaarT p g a b t) Source # Instance detailsMethodsmempty :: BazaarT p g a b t #mappend :: BazaarT p g a b t -> BazaarT p g a b t -> BazaarT p g a b t #mconcat :: [BazaarT p g a b t] -> BazaarT p g a b t # type BazaarT' p g a = BazaarT p g a a Source # This alias is helpful when it comes to reducing repetition in type signatures. type BazaarT' p g a t = BazaarT p g a a t  class Profunctor p => Bizarre1 p w | w -> p where Source # Minimal complete definition bazaar1 Methods bazaar1 :: Apply f => p a (f b) -> w a b t -> f t Source # Instances  Profunctor p => Bizarre1 p (Bazaar1 p) Source # Instance detailsMethodsbazaar1 :: Apply f => p a (f b) -> Bazaar1 p a b t -> f t Source # Profunctor p => Bizarre1 p (BazaarT1 p g) Source # Instance detailsMethodsbazaar1 :: Apply f => p a (f b) -> BazaarT1 p g a b t -> f t Source # newtype Bazaar1 p a b t Source # This is used to characterize a Traversal. a.k.a. indexed Cartesian store comonad, indexed Kleene store comonad, or an indexed FunList. http://twanvl.nl/blog/haskell/non-regular1 A Bazaar1 is like a Traversal that has already been applied to some structure. Where a Context a b t holds an a and a function from b to t, a Bazaar1 a b t holds N as and a function from N bs to t, (where N might be infinite). Mnemonically, a Bazaar1 holds many stores and you can easily add more. This is a final encoding of Bazaar1. Constructors  Bazaar1 FieldsrunBazaar1 :: forall f. Apply f => p a (f b) -> f t Instances  Corepresentable p => Sellable p (Bazaar1 p) Source # Instance detailsMethodssell :: p a (Bazaar1 p a b b) Source # Profunctor p => Bizarre1 p (Bazaar1 p) Source # Instance detailsMethodsbazaar1 :: Apply f => p a (f b) -> Bazaar1 p a b t -> f t Source # Source # Instance detailsMethodsiextract :: Bazaar1 p a a t -> t Source #iduplicate :: Bazaar1 p a c t -> Bazaar1 p a b (Bazaar1 p b c t) Source #iextend :: (Bazaar1 p b c t -> r) -> Bazaar1 p a c t -> Bazaar1 p a b r Source # Source # Instance detailsMethodsifmap :: (s -> t) -> Bazaar1 p a b s -> Bazaar1 p a b t Source # Functor (Bazaar1 p a b) Source # Instance detailsMethodsfmap :: (a0 -> b0) -> Bazaar1 p a b a0 -> Bazaar1 p a b b0 #(<$) :: a0 -> Bazaar1 p a b b0 -> Bazaar1 p a b a0 # ((~) * a b, Conjoined p) => Comonad (Bazaar1 p a b) Source # Instance detailsMethodsextract :: Bazaar1 p a b a0 -> a0 #duplicate :: Bazaar1 p a b a0 -> Bazaar1 p a b (Bazaar1 p a b a0) #extend :: (Bazaar1 p a b a0 -> b0) -> Bazaar1 p a b a0 -> Bazaar1 p a b b0 # ((~) * a b, Conjoined p) => ComonadApply (Bazaar1 p a b) Source # Instance detailsMethods(<@>) :: Bazaar1 p a b (a0 -> b0) -> Bazaar1 p a b a0 -> Bazaar1 p a b b0 #(@>) :: Bazaar1 p a b a0 -> Bazaar1 p a b b0 -> Bazaar1 p a b b0 #(<@) :: Bazaar1 p a b a0 -> Bazaar1 p a b b0 -> Bazaar1 p a b a0 # Apply (Bazaar1 p a b) Source # Instance detailsMethods(<.>) :: Bazaar1 p a b (a0 -> b0) -> Bazaar1 p a b a0 -> Bazaar1 p a b b0 #(.>) :: Bazaar1 p a b a0 -> Bazaar1 p a b b0 -> Bazaar1 p a b b0 #(<.) :: Bazaar1 p a b a0 -> Bazaar1 p a b b0 -> Bazaar1 p a b a0 #

type Bazaar1' p a = Bazaar1 p a a Source #

This alias is helpful when it comes to reducing repetition in type signatures.

type Bazaar1' p a t = Bazaar1 p a a t


newtype BazaarT1 p (g :: * -> *) a b t Source #

BazaarT1 is like Bazaar1, except that it provides a questionable Contravariant instance To protect this instance it relies on the soundness of another Contravariant type, and usage conventions.

For example. This lets us write a suitably polymorphic and lazy taking, but there must be a better way!

Constructors

 BazaarT1 FieldsrunBazaarT1 :: forall f. Apply f => p a (f b) -> f t
Instances
 Corepresentable p => Sellable p (BazaarT1 p g) Source # Instance detailsMethodssell :: p a (BazaarT1 p g a b b) Source # Profunctor p => Bizarre1 p (BazaarT1 p g) Source # Instance detailsMethodsbazaar1 :: Apply f => p a (f b) -> BazaarT1 p g a b t -> f t Source # Conjoined p => IndexedComonad (BazaarT1 p g) Source # Instance detailsMethodsiextract :: BazaarT1 p g a a t -> t Source #iduplicate :: BazaarT1 p g a c t -> BazaarT1 p g a b (BazaarT1 p g b c t) Source #iextend :: (BazaarT1 p g b c t -> r) -> BazaarT1 p g a c t -> BazaarT1 p g a b r Source # Source # Instance detailsMethodsifmap :: (s -> t) -> BazaarT1 p g a b s -> BazaarT1 p g a b t Source # Functor (BazaarT1 p g a b) Source # Instance detailsMethodsfmap :: (a0 -> b0) -> BazaarT1 p g a b a0 -> BazaarT1 p g a b b0 #(<$) :: a0 -> BazaarT1 p g a b b0 -> BazaarT1 p g a b a0 # (Profunctor p, Contravariant g) => Contravariant (BazaarT1 p g a b) Source # Instance detailsMethodscontramap :: (a0 -> b0) -> BazaarT1 p g a b b0 -> BazaarT1 p g a b a0 #(>$) :: b0 -> BazaarT1 p g a b b0 -> BazaarT1 p g a b a0 # ((~) * a b, Conjoined p) => Comonad (BazaarT1 p g a b) Source # Instance detailsMethodsextract :: BazaarT1 p g a b a0 -> a0 #duplicate :: BazaarT1 p g a b a0 -> BazaarT1 p g a b (BazaarT1 p g a b a0) #extend :: (BazaarT1 p g a b a0 -> b0) -> BazaarT1 p g a b a0 -> BazaarT1 p g a b b0 # ((~) * a b, Conjoined p) => ComonadApply (BazaarT1 p g a b) Source # Instance detailsMethods(<@>) :: BazaarT1 p g a b (a0 -> b0) -> BazaarT1 p g a b a0 -> BazaarT1 p g a b b0 #(@>) :: BazaarT1 p g a b a0 -> BazaarT1 p g a b b0 -> BazaarT1 p g a b b0 #(<@) :: BazaarT1 p g a b a0 -> BazaarT1 p g a b b0 -> BazaarT1 p g a b a0 # Apply (BazaarT1 p g a b) Source # Instance detailsMethods(<.>) :: BazaarT1 p g a b (a0 -> b0) -> BazaarT1 p g a b a0 -> BazaarT1 p g a b b0 #(.>) :: BazaarT1 p g a b a0 -> BazaarT1 p g a b b0 -> BazaarT1 p g a b b0 #(<.) :: BazaarT1 p g a b a0 -> BazaarT1 p g a b b0 -> BazaarT1 p g a b a0 # Contravariant g => Semigroup (BazaarT1 p g a b t) Source # Instance detailsMethods(<>) :: BazaarT1 p g a b t -> BazaarT1 p g a b t -> BazaarT1 p g a b t #sconcat :: NonEmpty (BazaarT1 p g a b t) -> BazaarT1 p g a b t #stimes :: Integral b0 => b0 -> BazaarT1 p g a b t -> BazaarT1 p g a b t #

type BazaarT1' p g a = BazaarT1 p g a a Source #

This alias is helpful when it comes to reducing repetition in type signatures.

type BazaarT1' p g a t = BazaarT1 p g a a t