Copyright  (C) 20122016 Edward Kmett 

License  BSDstyle (see the file LICENSE) 
Maintainer  Edward Kmett <ekmett@gmail.com> 
Stability  experimental 
Portability  nonportable 
Safe Haskell  Safe 
Language  Haskell98 
This module provides implementation details of the combinators in
Control.Lens.Level, which provides for the breadthfirst Traversal
of
an arbitrary Traversal
.
Levels
This data type represents a pathcompressed copy of one level of a source data structure. We can safely use pathcompression 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.
Instances
TraversableWithIndex i (Level i) Source #  
itraverse :: Applicative f => (i > a > f b) > Level i a > f (Level i b) Source # itraversed :: (Indexable i p, Applicative f) => p a (f b) > Level i a > f (Level i b) Source #  
FoldableWithIndex i (Level i) Source #  
ifoldMap :: Monoid m => (i > a > m) > Level i a > m Source # ifolded :: (Indexable i p, Contravariant f, Applicative f) => p a (f a) > Level i a > f (Level i 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 #  
FunctorWithIndex i (Level i) Source #  
Functor (Level i) Source #  
Foldable (Level i) Source #  
fold :: 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 # elem :: Eq a => a > Level i a > Bool # maximum :: Ord a => Level i a > a # minimum :: Ord a => Level i a > a #  
Traversable (Level i) Source #  
(Eq a, Eq i) => Eq (Level i a) Source #  
(Ord a, Ord i) => Ord (Level i a) Source #  
(Read a, Read i) => Read (Level i a) Source #  
(Show a, Show i) => Show (Level i a) Source #  
newtype Deepening i a Source #
Deepening  

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.
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.