lens-4.15.4: 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 b0) -> Magma i t b a -> f (Magma i t b b0) Source #

itraversed :: (Indexable i p, Applicative f) => p a (f b0) -> Magma i t b a -> f (Magma i t b b0) 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 -> b0 -> b0) -> b0 -> Magma i t b a -> b0 Source #

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

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

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

FunctorWithIndex i (Magma i t b) Source # 

Methods

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

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

Functor (Magma i t b) Source # 

Methods

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

(<$) :: a -> Magma i t b b0 -> 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 -> b0 -> b0) -> b0 -> Magma i t b a -> b0 #

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

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

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

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 b0) -> Magma i t b a -> f (Magma i t b b0) #

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

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

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 :: (a0 -> b0) -> Molten i a b a0 -> Molten i a b b0 #

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

Applicative (Molten i a b) Source # 

Methods

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

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

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

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

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

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

Methods

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

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

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

Apply (Molten i a b) Source # 

Methods

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

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

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

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 :: (a0 -> b0) -> Mafic a b a0 -> Mafic a b b0 #

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

Applicative (Mafic a b) Source # 

Methods

pure :: a0 -> Mafic a b a0 #

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

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

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

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

Apply (Mafic a b) Source # 

Methods

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

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

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

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 :: (a0 -> b0) -> TakingWhile p f a b a0 -> TakingWhile p f a b b0 #

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

Applicative (TakingWhile p f a b) Source # 

Methods

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

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

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

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

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

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

Methods

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

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

Apply (TakingWhile p f a b) Source # 

Methods

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

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

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

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.