lens-4.16: Lenses, Folds and Traversals

Copyright(C) 2012-2016 Edward Kmett
LicenseBSD-style (see the file LICENSE)
MaintainerEdward Kmett <ekmett@gmail.com>
Stabilityexperimental
Portabilitynon-portable
Safe HaskellSafe
LanguageHaskell98

Control.Lens.Internal.Magma

Contents

Description

 

Synopsis

Magma

data Magma i t b a where Source #

This provides a way to peek at the internal structure of a Traversal or IndexedTraversal

Constructors

MagmaAp :: Magma i (x -> y) b a -> Magma i x b a -> Magma i y b a 
MagmaPure :: x -> Magma i x b a 
MagmaFmap :: (x -> y) -> Magma i x b a -> Magma i y b a 
Magma :: i -> a -> Magma i b b a 

Instances

TraversableWithIndex i (Magma i t b) Source # 

Methods

itraverse :: Applicative f => (i -> a -> f b) -> Magma i t b a -> f (Magma i t b b) Source #

itraversed :: (Indexable i p, Applicative f) => p a (f b) -> Magma i t b a -> f (Magma i t b b) Source #

FoldableWithIndex i (Magma i t b) Source # 

Methods

ifoldMap :: Monoid m => (i -> a -> m) -> Magma i t b a -> m Source #

ifolded :: (Indexable i p, Contravariant f, Applicative f) => p a (f a) -> Magma i t b a -> f (Magma i t b a) Source #

ifoldr :: (i -> a -> b -> b) -> b -> Magma i t b a -> b Source #

ifoldl :: (i -> b -> a -> b) -> b -> Magma i t b a -> b Source #

ifoldr' :: (i -> a -> b -> b) -> b -> Magma i t b a -> b Source #

ifoldl' :: (i -> b -> a -> b) -> b -> Magma i t b a -> b Source #

FunctorWithIndex i (Magma i t b) Source # 

Methods

imap :: (i -> a -> b) -> Magma i t b a -> Magma i t b b Source #

imapped :: (Indexable i p, Settable f) => p a (f b) -> Magma i t b a -> f (Magma i t b b) Source #

Functor (Magma i t b) Source # 

Methods

fmap :: (a -> b) -> Magma i t b a -> Magma i t b b #

(<$) :: a -> Magma i t b b -> Magma i t b a #

Foldable (Magma i t b) Source # 

Methods

fold :: Monoid m => Magma i t b m -> m #

foldMap :: Monoid m => (a -> m) -> Magma i t b a -> m #

foldr :: (a -> b -> b) -> b -> Magma i t b a -> b #

foldr' :: (a -> b -> b) -> b -> Magma i t b a -> b #

foldl :: (b -> a -> b) -> b -> Magma i t b a -> b #

foldl' :: (b -> a -> b) -> b -> Magma i t b a -> b #

foldr1 :: (a -> a -> a) -> Magma i t b a -> a #

foldl1 :: (a -> a -> a) -> Magma i t b a -> a #

toList :: Magma i t b a -> [a] #

null :: Magma i t b a -> Bool #

length :: Magma i t b a -> Int #

elem :: Eq a => a -> Magma i t b a -> Bool #

maximum :: Ord a => Magma i t b a -> a #

minimum :: Ord a => Magma i t b a -> a #

sum :: Num a => Magma i t b a -> a #

product :: Num a => Magma i t b a -> a #

Traversable (Magma i t b) Source # 

Methods

traverse :: Applicative f => (a -> f b) -> Magma i t b a -> f (Magma i t b b) #

sequenceA :: Applicative f => Magma i t b (f a) -> f (Magma i t b a) #

mapM :: Monad m => (a -> m b) -> Magma i t b a -> m (Magma i t b b) #

sequence :: Monad m => Magma i t b (m a) -> m (Magma i t b a) #

(Show i, Show a) => Show (Magma i t b a) Source # 

Methods

showsPrec :: Int -> Magma i t b a -> ShowS #

show :: Magma i t b a -> String #

showList :: [Magma i t b a] -> ShowS #

runMagma :: Magma i t a a -> t Source #

Run a Magma where all the individual leaves have been converted to the expected type

Molten

newtype Molten i a b t Source #

This is a a non-reassociating initially encoded version of Bazaar.

Constructors

Molten 

Fields

Instances

IndexedComonad (Molten i) Source # 

Methods

iextract :: Molten i a a t -> t Source #

iduplicate :: Molten i a c t -> Molten i a b (Molten i b c t) Source #

iextend :: (Molten i b c t -> r) -> Molten i a c t -> Molten i a b r Source #

IndexedFunctor (Molten i) Source # 

Methods

ifmap :: (s -> t) -> Molten i a b s -> Molten i a b t Source #

Sellable (Indexed i) (Molten i) Source # 

Methods

sell :: Indexed i a (Molten i a b b) Source #

Bizarre (Indexed i) (Molten i) Source # 

Methods

bazaar :: Applicative f => Indexed i a (f b) -> Molten i a b t -> f t Source #

Functor (Molten i a b) Source # 

Methods

fmap :: (a -> b) -> Molten i a b a -> Molten i a b b #

(<$) :: a -> Molten i a b b -> Molten i a b a #

Applicative (Molten i a b) Source # 

Methods

pure :: a -> Molten i a b a #

(<*>) :: Molten i a b (a -> b) -> Molten i a b a -> Molten i a b b #

liftA2 :: (a -> b -> c) -> Molten i a b a -> Molten i a b b -> Molten i a b c #

(*>) :: Molten i a b a -> Molten i a b b -> Molten i a b b #

(<*) :: Molten i a b a -> Molten i a b b -> Molten i a b a #

(~) * a b => Comonad (Molten i a b) Source # 

Methods

extract :: Molten i a b a -> a #

duplicate :: Molten i a b a -> Molten i a b (Molten i a b a) #

extend :: (Molten i a b a -> b) -> Molten i a b a -> Molten i a b b #

Apply (Molten i a b) Source # 

Methods

(<.>) :: Molten i a b (a -> b) -> Molten i a b a -> Molten i a b b #

(.>) :: Molten i a b a -> Molten i a b b -> Molten i a b b #

(<.) :: Molten i a b a -> Molten i a b b -> Molten i a b a #

liftF2 :: (a -> b -> c) -> Molten i a b a -> Molten i a b b -> Molten i a b c #

Mafic

data Mafic a b t Source #

This is used to generate an indexed magma from an unindexed source

By constructing it this way we avoid infinite reassociations in sums where possible.

Constructors

Mafic Int (Int -> Magma Int t b a) 

Instances

IndexedFunctor Mafic Source # 

Methods

ifmap :: (s -> t) -> Mafic a b s -> Mafic a b t Source #

Bizarre (Indexed Int) Mafic Source # 

Methods

bazaar :: Applicative f => Indexed Int a (f b) -> Mafic a b t -> f t Source #

Functor (Mafic a b) Source # 

Methods

fmap :: (a -> b) -> Mafic a b a -> Mafic a b b #

(<$) :: a -> Mafic a b b -> Mafic a b a #

Applicative (Mafic a b) Source # 

Methods

pure :: a -> Mafic a b a #

(<*>) :: Mafic a b (a -> b) -> Mafic a b a -> Mafic a b b #

liftA2 :: (a -> b -> c) -> Mafic a b a -> Mafic a b b -> Mafic a b c #

(*>) :: Mafic a b a -> Mafic a b b -> Mafic a b b #

(<*) :: Mafic a b a -> Mafic a b b -> Mafic a b a #

Apply (Mafic a b) Source # 

Methods

(<.>) :: Mafic a b (a -> b) -> Mafic a b a -> Mafic a b b #

(.>) :: Mafic a b a -> Mafic a b b -> Mafic a b b #

(<.) :: Mafic a b a -> Mafic a b b -> Mafic a b a #

liftF2 :: (a -> b -> c) -> Mafic a b a -> Mafic a b b -> Mafic a b c #

Sellable ((->) LiftedRep LiftedRep) Mafic Source # 

Methods

sell :: (LiftedRep -> LiftedRep) a (Mafic a b b) Source #

runMafic :: Mafic a b t -> Magma Int t b a Source #

Generate a Magma using from a prefix sum.

TakingWhile

data TakingWhile p (g :: * -> *) a b t Source #

This is used to generate an indexed magma from an unindexed source

By constructing it this way we avoid infinite reassociations where possible.

In TakingWhile p g a b t, g has a nominal role to avoid exposing an illegal _|_ via Contravariant, while the remaining arguments are degraded to a nominal role by the invariants of Magma

Constructors

TakingWhile Bool t (Bool -> Magma () t b (Corep p a)) 

Instances

Corepresentable p => Bizarre p (TakingWhile p g) Source # 

Methods

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

IndexedFunctor (TakingWhile p f) Source # 

Methods

ifmap :: (s -> t) -> TakingWhile p f a b s -> TakingWhile p f a b t Source #

Functor (TakingWhile p f a b) Source # 

Methods

fmap :: (a -> b) -> TakingWhile p f a b a -> TakingWhile p f a b b #

(<$) :: a -> TakingWhile p f a b b -> TakingWhile p f a b a #

Applicative (TakingWhile p f a b) Source # 

Methods

pure :: a -> TakingWhile p f a b a #

(<*>) :: TakingWhile p f a b (a -> b) -> TakingWhile p f a b a -> TakingWhile p f a b b #

liftA2 :: (a -> b -> c) -> TakingWhile p f a b a -> TakingWhile p f a b b -> TakingWhile p f a b c #

(*>) :: TakingWhile p f a b a -> TakingWhile p f a b b -> TakingWhile p f a b b #

(<*) :: TakingWhile p f a b a -> TakingWhile p f a b b -> TakingWhile p f a b a #

Contravariant f => Contravariant (TakingWhile p f a b) Source # 

Methods

contramap :: (a -> b) -> TakingWhile p f a b b -> TakingWhile p f a b a #

(>$) :: b -> TakingWhile p f a b b -> TakingWhile p f a b a #

Apply (TakingWhile p f a b) Source # 

Methods

(<.>) :: TakingWhile p f a b (a -> b) -> TakingWhile p f a b a -> TakingWhile p f a b b #

(.>) :: TakingWhile p f a b a -> TakingWhile p f a b b -> TakingWhile p f a b b #

(<.) :: TakingWhile p f a b a -> TakingWhile p f a b b -> TakingWhile p f a b a #

liftF2 :: (a -> b -> c) -> TakingWhile p f a b a -> TakingWhile p f a b b -> TakingWhile p f a b c #

runTakingWhile :: TakingWhile p f a b t -> Magma () t b (Corep p a) Source #

Generate a Magma with leaves only while the predicate holds from left to right.