lens-5.3.3: Lenses, Folds and Traversals

Copyright | (C) 2012-2016 Edward Kmett
License | BSD-style (see the file LICENSE)
Maintainer | Edward Kmett <ekmett@gmail.com>
Stability | experimental
Portability | non-portable
Safe Haskell | Safe-Inferred
Language | Haskell2010

Control.Lens.Internal.Level

Contents

- Levels

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

- data Level i a
  - = Two !Word !(Level i a) !(Level i a)
  - | One i a
  - | Zero
- newtype Deepening i a = Deepening {
  - runDeepening :: forall r. Int -> (Level i a -> Bool -> r) -> r
  }
- deepening :: i -> a -> Deepening i a
- newtype Flows i b a = Flows {
  - runFlows :: [Level i b] -> a
  }

# Levels

data Level i a #

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

Instances details

FoldableWithIndex i (Level i) # |
Instance details Defined in Control.Lens.Internal.Level Methods ifoldMap :: Monoid m => (i -> a -> m) -> Level i a -> m # ifoldMap' :: Monoid m => (i -> a -> m) -> Level i a -> m # ifoldr :: (i -> a -> b -> b) -> b -> Level i a -> b # ifoldl :: (i -> b -> a -> b) -> b -> Level i a -> b # ifoldr' :: (i -> a -> b -> b) -> b -> Level i a -> b # ifoldl' :: (i -> b -> a -> b) -> b -> Level i a -> b #
FunctorWithIndex i (Level i) # |
Instance details Defined in Control.Lens.Internal.Level Methods imap :: (i -> a -> b) -> Level i a -> Level i b #
TraversableWithIndex i (Level i) # |
Instance details Defined in Control.Lens.Internal.Level Methods itraverse :: Applicative f => (i -> a -> f b) -> Level i a -> f (Level i b) #
Functor (Level i) # |
Instance details Defined in Control.Lens.Internal.Level Methods fmap :: (a -> b) -> Level i a -> Level i b # (<$) :: a -> Level i b -> Level i a #
Foldable (Level i) # |
Instance details Defined in Control.Lens.Internal.Level Methods fold :: Monoid m => Level i m -> m # foldMap :: Monoid m => (a -> m) -> Level i a -> 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 #
Traversable (Level i) # |
Instance details Defined in Control.Lens.Internal.Level Methods traverse :: 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) #
(Read i, Read a) => Read (Level i a) # |
Instance details Defined in Control.Lens.Internal.Level Methods readsPrec :: 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) # |
Instance details Defined in Control.Lens.Internal.Level Methods showsPrec :: Int -> Level i a -> ShowS # show :: Level i a -> String # showList :: [Level i a] -> ShowS #
(Eq i, Eq a) => Eq (Level i a) # |
Instance details Defined 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) # |
Instance details Defined in Control.Lens.Internal.Level Methods compare :: 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 #

newtype Deepening i a #

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

Constructors

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

#### Instances

Instances details

Monoid (Deepening i a) # | This is an illegal `Monoid`.
Instance details Defined in Control.Lens.Internal.Level Methods mempty :: Deepening i a # mappend :: Deepening i a -> Deepening i a -> Deepening i a # mconcat :: [Deepening i a] -> Deepening i a #
Semigroup (Deepening i a) # |
Instance details Defined 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 #

deepening :: i -> a -> Deepening i a #

Generate the leaf of a given `Deepening` based on whether or not we're at the correct depth.

newtype Flows i b a #

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 |
Fields runFlows :: [Level i b] -> a

#### Instances

Instances details

Applicative (Flows i b) # | This is an illegal `Applicative`.
Instance details Defined in Control.Lens.Internal.Level Methods pure :: 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 #
Functor (Flows i b) # |
Instance details Defined in Control.Lens.Internal.Level Methods fmap :: (a -> b0) -> Flows i b a -> Flows i b b0 # (<$) :: a -> Flows i b b0 -> Flows i b a #
Apply (Flows i b) # |
Instance details Defined 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 #