lens- Lenses, Folds and Traversals

MaintainerEdward Kmett <ekmett@gmail.com>
Safe HaskellTrustworthy




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



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.


Two !Word !(Level i a) !(Level i a) 
One i a 


(FunctorWithIndex i (Level i), FoldableWithIndex i (Level i), Traversable (Level i)) => TraversableWithIndex i (Level i) 
Foldable (Level i) => FoldableWithIndex i (Level i) 
Functor (Level i) => FunctorWithIndex i (Level i) 
Functor (Level i) 
Foldable (Level i) 
(Functor (Level i), Foldable (Level i)) => Traversable (Level i) 
(Eq i, Eq a) => Eq (Level i a) 
(Eq (Level i a), Ord i, Ord a) => Ord (Level i a) 
(Read i, Read a) => Read (Level i a) 
(Show i, Show a) => Show (Level i a) 

newtype Deepening i a Source

This is an illegal Monoid used to construct a single Level.




runDeepening :: forall r. Int -> (Level i a -> Bool -> r) -> r


Monoid (Deepening i a)

This is an illegal Monoid.

Semigroup (Deepening i a) 

deepening :: i -> a -> Deepening i aSource

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.




runFlows :: [Level i b] -> a


Functor (Flows i b) 
Functor (Flows i b) => Applicative (Flows i b)

This is an illegal Applicative.

Functor (Flows i b) => Apply (Flows i b)