lens-4.19.2: Lenses, Folds and Traversals

Copyright (C) 2012-2016 Edward Kmett BSD-style (see the file LICENSE) Edward Kmett experimental non-portable Safe Haskell2010

Control.Lens.Internal.Level

Contents

Description

This module provides implementation details of the combinators in Control.Lens.Level, which provides for the breadth-first Traversal of an arbitrary Traversal.

Synopsis

# Levels

data Level i a Source #

This data type represents a path-compressed copy of one level of a source data structure. We can safely use path-compression because we know the depth of the tree.

Path compression is performed by viewing a Level as a PATRICIA trie of the paths into the structure to leaves at a given depth, similar in many ways to a IntMap, but unlike a regular PATRICIA trie we do not need to store the mask bits merely the depth of the fork.

One invariant of this structure is that underneath a Two node you will not find any Zero nodes, so Zero can only occur at the root.

Constructors

 Two !Word !(Level i a) !(Level i a) One i a Zero
Instances
 Source # Instance detailsDefined in Control.Lens.Indexed Methodsitraverse :: Applicative f => (i -> a -> f b) -> Level i a -> f (Level i b) Source #itraversed :: IndexedTraversal i (Level i a) (Level i b) a b Source # Source # Instance detailsDefined in Control.Lens.Indexed MethodsifoldMap :: Monoid m => (i -> a -> m) -> Level i a -> m Source #ifolded :: IndexedFold i (Level i a) a Source #ifoldr :: (i -> a -> b -> b) -> b -> Level i a -> b Source #ifoldl :: (i -> b -> a -> b) -> b -> Level i a -> b Source #ifoldr' :: (i -> a -> b -> b) -> b -> Level i a -> b Source #ifoldl' :: (i -> b -> a -> b) -> b -> Level i a -> b Source # Source # Instance detailsDefined in Control.Lens.Indexed Methodsimap :: (i -> a -> b) -> Level i a -> Level i b Source #imapped :: IndexedSetter i (Level i a) (Level i b) a b Source # Functor (Level i) Source # Instance detailsDefined in Control.Lens.Internal.Level Methodsfmap :: (a -> b) -> Level i a -> Level i b #(<$) :: a -> Level i b -> Level i a # Source # Instance detailsDefined in Control.Lens.Internal.Level Methodsfold :: Monoid m => Level i m -> m #foldMap :: Monoid m => (a -> m) -> Level i a -> m #foldr :: (a -> b -> b) -> b -> Level i a -> b #foldr' :: (a -> b -> b) -> b -> Level i a -> b #foldl :: (b -> a -> b) -> b -> Level i a -> b #foldl' :: (b -> a -> b) -> b -> Level i a -> b #foldr1 :: (a -> a -> a) -> Level i a -> a #foldl1 :: (a -> a -> a) -> Level i a -> a #toList :: Level i a -> [a] #null :: Level i a -> Bool #length :: Level i a -> Int #elem :: Eq a => a -> Level i a -> Bool #maximum :: Ord a => Level i a -> a #minimum :: Ord a => Level i a -> a #sum :: Num a => Level i a -> a #product :: Num a => Level i a -> a # Source # Instance detailsDefined in Control.Lens.Internal.Level Methodstraverse :: Applicative f => (a -> f b) -> Level i a -> f (Level i b) #sequenceA :: Applicative f => Level i (f a) -> f (Level i a) #mapM :: Monad m => (a -> m b) -> Level i a -> m (Level i b) #sequence :: Monad m => Level i (m a) -> m (Level i a) # (Eq i, Eq a) => Eq (Level i a) Source # Instance detailsDefined in Control.Lens.Internal.Level Methods(==) :: Level i a -> Level i a -> Bool #(/=) :: Level i a -> Level i a -> Bool # (Ord i, Ord a) => Ord (Level i a) Source # Instance detailsDefined in Control.Lens.Internal.Level Methodscompare :: Level i a -> Level i a -> Ordering #(<) :: Level i a -> Level i a -> Bool #(<=) :: Level i a -> Level i a -> Bool #(>) :: Level i a -> Level i a -> Bool #(>=) :: Level i a -> Level i a -> Bool #max :: Level i a -> Level i a -> Level i a #min :: Level i a -> Level i a -> Level i a # (Read i, Read a) => Read (Level i a) Source # Instance detailsDefined in Control.Lens.Internal.Level MethodsreadsPrec :: Int -> ReadS (Level i a) #readList :: ReadS [Level i a] #readPrec :: ReadPrec (Level i a) #readListPrec :: ReadPrec [Level i a] # (Show i, Show a) => Show (Level i a) Source # Instance detailsDefined in Control.Lens.Internal.Level MethodsshowsPrec :: Int -> Level i a -> ShowS #show :: Level i a -> String #showList :: [Level i a] -> ShowS # newtype Deepening i a Source # This is an illegal Monoid used to construct a single Level. Constructors  Deepening FieldsrunDeepening :: forall r. Int -> (Level i a -> Bool -> r) -> r Instances  Semigroup (Deepening i a) Source # Instance detailsDefined in Control.Lens.Internal.Level Methods(<>) :: Deepening i a -> Deepening i a -> Deepening i a #sconcat :: NonEmpty (Deepening i a) -> Deepening i a #stimes :: Integral b => b -> Deepening i a -> Deepening i a # Monoid (Deepening i a) Source # This is an illegal Monoid. Instance detailsDefined in Control.Lens.Internal.Level Methodsmempty :: Deepening i a #mappend :: Deepening i a -> Deepening i a -> Deepening i a #mconcat :: [Deepening i a] -> Deepening i a # deepening :: i -> a -> Deepening i a Source # Generate the leaf of a given Deepening based on whether or not we're at the correct depth. newtype Flows i b a Source # This is an illegal Applicative used to replace the contents of a list of consecutive Level values representing each layer of a structure into the original shape that they were derived from. Attempting to Flow something back into a shape other than the one it was taken from will fail. Constructors  Flows FieldsrunFlows :: [Level i b] -> a Instances  Functor (Flows i b) Source # Instance detailsDefined in Control.Lens.Internal.Level Methodsfmap :: (a -> b0) -> Flows i b a -> Flows i b b0 #(<$) :: a -> Flows i b b0 -> Flows i b a # Applicative (Flows i b) Source # This is an illegal Applicative. Instance detailsDefined in Control.Lens.Internal.Level Methodspure :: a -> Flows i b a #(<*>) :: Flows i b (a -> b0) -> Flows i b a -> Flows i b b0 #liftA2 :: (a -> b0 -> c) -> Flows i b a -> Flows i b b0 -> Flows i b c #(*>) :: Flows i b a -> Flows i b b0 -> Flows i b b0 #(<*) :: Flows i b a -> Flows i b b0 -> Flows i b a # Apply (Flows i b) Source # Instance detailsDefined in Control.Lens.Internal.Level Methods(<.>) :: Flows i b (a -> b0) -> Flows i b a -> Flows i b b0 #(.>) :: Flows i b a -> Flows i b b0 -> Flows i b b0 #(<.) :: Flows i b a -> Flows i b b0 -> Flows i b a #liftF2 :: (a -> b0 -> c) -> Flows i b a -> Flows i b b0 -> Flows i b c #