{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE TypeFamilies #-} module Cursor.Map ( MapCursor (..), makeMapCursor, makeMapCursorWithSelection, singletonMapCursorKey, singletonMapCursorValue, rebuildMapCursor, mapMapCursor, mapCursorNonEmptyCursorL, mapCursorElemL, mapCursorElemSelection, mapCursorSelectKey, mapCursorSelectValue, mapCursorToggleSelected, mapCursorSelectPrev, mapCursorSelectNext, mapCursorSelectFirst, mapCursorSelectLast, mapCursorSelection, mapCursorSelectIndex, mapCursorInsert, mapCursorAppend, mapCursorInsertAndSelectKey, mapCursorAppendAndSelectKey, mapCursorInsertAndSelectValue, mapCursorAppendAndSelectValue, mapCursorRemoveElemAndSelectPrev, mapCursorDeleteElemAndSelectNext, mapCursorRemoveElem, mapCursorDeleteElem, mapCursorSearch, mapCursorSelectOrAdd, traverseMapCursor, mapCursorTraverseKeyCase, mapCursorTraverseValueCase, foldMapCursor, module Cursor.Map.KeyValue, ) where import Control.DeepSeq import Cursor.List.NonEmpty import Cursor.Map.KeyValue import Cursor.Types import Data.List.NonEmpty (NonEmpty (..)) import Data.Maybe import Data.Validity import Data.Validity.Tree () import GHC.Generics (Generic) import Lens.Micro newtype MapCursor kc vc k v = MapCursor { MapCursor kc vc k v -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) mapCursorList :: NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) } deriving (Int -> MapCursor kc vc k v -> ShowS [MapCursor kc vc k v] -> ShowS MapCursor kc vc k v -> String (Int -> MapCursor kc vc k v -> ShowS) -> (MapCursor kc vc k v -> String) -> ([MapCursor kc vc k v] -> ShowS) -> Show (MapCursor kc vc k v) forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a forall kc vc k v. (Show k, Show v, Show kc, Show vc) => Int -> MapCursor kc vc k v -> ShowS forall kc vc k v. (Show k, Show v, Show kc, Show vc) => [MapCursor kc vc k v] -> ShowS forall kc vc k v. (Show k, Show v, Show kc, Show vc) => MapCursor kc vc k v -> String showList :: [MapCursor kc vc k v] -> ShowS $cshowList :: forall kc vc k v. (Show k, Show v, Show kc, Show vc) => [MapCursor kc vc k v] -> ShowS show :: MapCursor kc vc k v -> String $cshow :: forall kc vc k v. (Show k, Show v, Show kc, Show vc) => MapCursor kc vc k v -> String showsPrec :: Int -> MapCursor kc vc k v -> ShowS $cshowsPrec :: forall kc vc k v. (Show k, Show v, Show kc, Show vc) => Int -> MapCursor kc vc k v -> ShowS Show, MapCursor kc vc k v -> MapCursor kc vc k v -> Bool (MapCursor kc vc k v -> MapCursor kc vc k v -> Bool) -> (MapCursor kc vc k v -> MapCursor kc vc k v -> Bool) -> Eq (MapCursor kc vc k v) forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a forall kc vc k v. (Eq k, Eq v, Eq kc, Eq vc) => MapCursor kc vc k v -> MapCursor kc vc k v -> Bool /= :: MapCursor kc vc k v -> MapCursor kc vc k v -> Bool $c/= :: forall kc vc k v. (Eq k, Eq v, Eq kc, Eq vc) => MapCursor kc vc k v -> MapCursor kc vc k v -> Bool == :: MapCursor kc vc k v -> MapCursor kc vc k v -> Bool $c== :: forall kc vc k v. (Eq k, Eq v, Eq kc, Eq vc) => MapCursor kc vc k v -> MapCursor kc vc k v -> Bool Eq, (forall x. MapCursor kc vc k v -> Rep (MapCursor kc vc k v) x) -> (forall x. Rep (MapCursor kc vc k v) x -> MapCursor kc vc k v) -> Generic (MapCursor kc vc k v) forall x. Rep (MapCursor kc vc k v) x -> MapCursor kc vc k v forall x. MapCursor kc vc k v -> Rep (MapCursor kc vc k v) x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a forall kc vc k v x. Rep (MapCursor kc vc k v) x -> MapCursor kc vc k v forall kc vc k v x. MapCursor kc vc k v -> Rep (MapCursor kc vc k v) x $cto :: forall kc vc k v x. Rep (MapCursor kc vc k v) x -> MapCursor kc vc k v $cfrom :: forall kc vc k v x. MapCursor kc vc k v -> Rep (MapCursor kc vc k v) x Generic) instance (Validity kc, Validity vc, Validity k, Validity v) => Validity (MapCursor kc vc k v) instance (NFData kc, NFData vc, NFData k, NFData v) => NFData (MapCursor kc vc k v) makeMapCursor :: (k -> kc) -> NonEmpty (k, v) -> MapCursor kc vc k v makeMapCursor :: (k -> kc) -> NonEmpty (k, v) -> MapCursor kc vc k v makeMapCursor k -> kc h = Maybe (MapCursor kc vc k v) -> MapCursor kc vc k v forall a. HasCallStack => Maybe a -> a fromJust (Maybe (MapCursor kc vc k v) -> MapCursor kc vc k v) -> (NonEmpty (k, v) -> Maybe (MapCursor kc vc k v)) -> NonEmpty (k, v) -> MapCursor kc vc k v forall b c a. (b -> c) -> (a -> b) -> a -> c . (k -> kc) -> Int -> NonEmpty (k, v) -> Maybe (MapCursor kc vc k v) forall k kc v vc. (k -> kc) -> Int -> NonEmpty (k, v) -> Maybe (MapCursor kc vc k v) makeMapCursorWithSelection k -> kc h Int 0 makeMapCursorWithSelection :: (k -> kc) -> Int -> NonEmpty (k, v) -> Maybe (MapCursor kc vc k v) makeMapCursorWithSelection :: (k -> kc) -> Int -> NonEmpty (k, v) -> Maybe (MapCursor kc vc k v) makeMapCursorWithSelection k -> kc h Int i NonEmpty (k, v) ne = NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> MapCursor kc vc k v forall kc vc k v. NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> MapCursor kc vc k v MapCursor (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> MapCursor kc vc k v) -> Maybe (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) -> Maybe (MapCursor kc vc k v) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> ((k, v) -> KeyValueCursor kc vc k v) -> Int -> NonEmpty (k, v) -> Maybe (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) forall b a. (b -> a) -> Int -> NonEmpty b -> Maybe (NonEmptyCursor a b) makeNonEmptyCursorWithSelection (\(k k, v v) -> kc -> v -> KeyValueCursor kc vc k v forall kc v vc k. kc -> v -> KeyValueCursor kc vc k v makeKeyValueCursorKey (k -> kc h k k) v v) Int i NonEmpty (k, v) ne singletonMapCursorKey :: kc -> v -> MapCursor kc vc k v singletonMapCursorKey :: kc -> v -> MapCursor kc vc k v singletonMapCursorKey kc kc v v = MapCursor :: forall kc vc k v. NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> MapCursor kc vc k v MapCursor {mapCursorList :: NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) mapCursorList = KeyValueCursor kc vc k v -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) forall a b. a -> NonEmptyCursor a b singletonNonEmptyCursor (KeyValueCursor kc vc k v -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) -> KeyValueCursor kc vc k v -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) forall a b. (a -> b) -> a -> b $ kc -> v -> KeyValueCursor kc vc k v forall kc v vc k. kc -> v -> KeyValueCursor kc vc k v makeKeyValueCursorKey kc kc v v} singletonMapCursorValue :: k -> vc -> MapCursor kc vc k v singletonMapCursorValue :: k -> vc -> MapCursor kc vc k v singletonMapCursorValue k k vc vc = MapCursor :: forall kc vc k v. NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> MapCursor kc vc k v MapCursor {mapCursorList :: NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) mapCursorList = KeyValueCursor kc vc k v -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) forall a b. a -> NonEmptyCursor a b singletonNonEmptyCursor (KeyValueCursor kc vc k v -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) -> KeyValueCursor kc vc k v -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) forall a b. (a -> b) -> a -> b $ k -> vc -> KeyValueCursor kc vc k v forall k vc kc v. k -> vc -> KeyValueCursor kc vc k v makeKeyValueCursorValue k k vc vc} rebuildMapCursor :: (kc -> k) -> (vc -> v) -> MapCursor kc vc k v -> NonEmpty (k, v) rebuildMapCursor :: (kc -> k) -> (vc -> v) -> MapCursor kc vc k v -> NonEmpty (k, v) rebuildMapCursor kc -> k f vc -> v g = (KeyValueCursor kc vc k v -> (k, v)) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> NonEmpty (k, v) forall a b. (a -> b) -> NonEmptyCursor a b -> NonEmpty b rebuildNonEmptyCursor ((kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) forall kc k vc v. (kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) rebuildKeyValueCursor kc -> k f vc -> v g) (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> NonEmpty (k, v)) -> (MapCursor kc vc k v -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) -> MapCursor kc vc k v -> NonEmpty (k, v) forall b c a. (b -> c) -> (a -> b) -> a -> c . MapCursor kc vc k v -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) forall kc vc k v. MapCursor kc vc k v -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) mapCursorList mapMapCursor :: (kc -> lc) -> (vc -> wc) -> (k -> l) -> (v -> w) -> MapCursor kc vc k v -> MapCursor lc wc l w mapMapCursor :: (kc -> lc) -> (vc -> wc) -> (k -> l) -> (v -> w) -> MapCursor kc vc k v -> MapCursor lc wc l w mapMapCursor kc -> lc a vc -> wc b k -> l c v -> w d = (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Identity (NonEmptyCursor (KeyValueCursor lc wc l w) (l, w))) -> MapCursor kc vc k v -> Identity (MapCursor lc wc l w) forall kc vc k v lc wc l w. Lens (MapCursor kc vc k v) (MapCursor lc wc l w) (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) (NonEmptyCursor (KeyValueCursor lc wc l w) (l, w)) mapCursorNonEmptyCursorL ((NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Identity (NonEmptyCursor (KeyValueCursor lc wc l w) (l, w))) -> MapCursor kc vc k v -> Identity (MapCursor lc wc l w)) -> (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> NonEmptyCursor (KeyValueCursor lc wc l w) (l, w)) -> MapCursor kc vc k v -> MapCursor lc wc l w forall s t a b. ASetter s t a b -> (a -> b) -> s -> t %~ (KeyValueCursor kc vc k v -> KeyValueCursor lc wc l w) -> ((k, v) -> (l, w)) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> NonEmptyCursor (KeyValueCursor lc wc l w) (l, w) forall a c b d. (a -> c) -> (b -> d) -> NonEmptyCursor a b -> NonEmptyCursor c d mapNonEmptyCursor ((kc -> lc) -> (vc -> wc) -> (k -> l) -> (v -> w) -> KeyValueCursor kc vc k v -> KeyValueCursor lc wc l w forall kc lc vc wc k l v w. (kc -> lc) -> (vc -> wc) -> (k -> l) -> (v -> w) -> KeyValueCursor kc vc k v -> KeyValueCursor lc wc l w mapKeyValueCursor kc -> lc a vc -> wc b k -> l c v -> w d) (\(k k, v v) -> (k -> l c k k, v -> w d v v)) mapCursorNonEmptyCursorL :: Lens (MapCursor kc vc k v) (MapCursor lc wc l w) ( NonEmptyCursor (KeyValueCursor kc vc k v) ( k, v ) ) ( NonEmptyCursor (KeyValueCursor lc wc l w) ( l, w ) ) mapCursorNonEmptyCursorL :: (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> f (NonEmptyCursor (KeyValueCursor lc wc l w) (l, w))) -> MapCursor kc vc k v -> f (MapCursor lc wc l w) mapCursorNonEmptyCursorL = (MapCursor kc vc k v -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) -> (MapCursor kc vc k v -> NonEmptyCursor (KeyValueCursor lc wc l w) (l, w) -> MapCursor lc wc l w) -> Lens (MapCursor kc vc k v) (MapCursor lc wc l w) (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) (NonEmptyCursor (KeyValueCursor lc wc l w) (l, w)) forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b lens MapCursor kc vc k v -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) forall kc vc k v. MapCursor kc vc k v -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) mapCursorList ((MapCursor kc vc k v -> NonEmptyCursor (KeyValueCursor lc wc l w) (l, w) -> MapCursor lc wc l w) -> Lens (MapCursor kc vc k v) (MapCursor lc wc l w) (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) (NonEmptyCursor (KeyValueCursor lc wc l w) (l, w))) -> (MapCursor kc vc k v -> NonEmptyCursor (KeyValueCursor lc wc l w) (l, w) -> MapCursor lc wc l w) -> Lens (MapCursor kc vc k v) (MapCursor lc wc l w) (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) (NonEmptyCursor (KeyValueCursor lc wc l w) (l, w)) forall a b. (a -> b) -> a -> b $ \MapCursor kc vc k v mc NonEmptyCursor (KeyValueCursor lc wc l w) (l, w) ne -> MapCursor kc vc k v mc {mapCursorList :: NonEmptyCursor (KeyValueCursor lc wc l w) (l, w) mapCursorList = NonEmptyCursor (KeyValueCursor lc wc l w) (l, w) ne} mapCursorElemL :: Lens (MapCursor kc vc k v) (MapCursor kc' vc' k v) (KeyValueCursor kc vc k v) (KeyValueCursor kc' vc' k v) mapCursorElemL :: (KeyValueCursor kc vc k v -> f (KeyValueCursor kc' vc' k v)) -> MapCursor kc vc k v -> f (MapCursor kc' vc' k v) mapCursorElemL = (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> f (NonEmptyCursor (KeyValueCursor kc' vc' k v) (k, v))) -> MapCursor kc vc k v -> f (MapCursor kc' vc' k v) forall kc vc k v lc wc l w. Lens (MapCursor kc vc k v) (MapCursor lc wc l w) (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) (NonEmptyCursor (KeyValueCursor lc wc l w) (l, w)) mapCursorNonEmptyCursorL ((NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> f (NonEmptyCursor (KeyValueCursor kc' vc' k v) (k, v))) -> MapCursor kc vc k v -> f (MapCursor kc' vc' k v)) -> ((KeyValueCursor kc vc k v -> f (KeyValueCursor kc' vc' k v)) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> f (NonEmptyCursor (KeyValueCursor kc' vc' k v) (k, v))) -> (KeyValueCursor kc vc k v -> f (KeyValueCursor kc' vc' k v)) -> MapCursor kc vc k v -> f (MapCursor kc' vc' k v) forall b c a. (b -> c) -> (a -> b) -> a -> c . (KeyValueCursor kc vc k v -> f (KeyValueCursor kc' vc' k v)) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> f (NonEmptyCursor (KeyValueCursor kc' vc' k v) (k, v)) forall a c b. Lens (NonEmptyCursor a c) (NonEmptyCursor b c) a b nonEmptyCursorElemL mapCursorElemSelection :: MapCursor kc vc k v -> KeyValueToggle mapCursorElemSelection :: MapCursor kc vc k v -> KeyValueToggle mapCursorElemSelection MapCursor kc vc k v mc = KeyValueCursor kc vc k v -> KeyValueToggle forall kc vc k v. KeyValueCursor kc vc k v -> KeyValueToggle keyValueCursorSelection (KeyValueCursor kc vc k v -> KeyValueToggle) -> KeyValueCursor kc vc k v -> KeyValueToggle forall a b. (a -> b) -> a -> b $ MapCursor kc vc k v mc MapCursor kc vc k v -> Getting (KeyValueCursor kc vc k v) (MapCursor kc vc k v) (KeyValueCursor kc vc k v) -> KeyValueCursor kc vc k v forall s a. s -> Getting a s a -> a ^. Getting (KeyValueCursor kc vc k v) (MapCursor kc vc k v) (KeyValueCursor kc vc k v) forall kc vc k v kc' vc'. Lens (MapCursor kc vc k v) (MapCursor kc' vc' k v) (KeyValueCursor kc vc k v) (KeyValueCursor kc' vc' k v) mapCursorElemL mapCursorSelectKey :: (k -> kc) -> (vc -> v) -> MapCursor kc vc k v -> MapCursor kc vc k v mapCursorSelectKey :: (k -> kc) -> (vc -> v) -> MapCursor kc vc k v -> MapCursor kc vc k v mapCursorSelectKey k -> kc g vc -> v h = (KeyValueCursor kc vc k v -> Identity (KeyValueCursor kc vc k v)) -> MapCursor kc vc k v -> Identity (MapCursor kc vc k v) forall kc vc k v kc' vc'. Lens (MapCursor kc vc k v) (MapCursor kc' vc' k v) (KeyValueCursor kc vc k v) (KeyValueCursor kc' vc' k v) mapCursorElemL ((KeyValueCursor kc vc k v -> Identity (KeyValueCursor kc vc k v)) -> MapCursor kc vc k v -> Identity (MapCursor kc vc k v)) -> (KeyValueCursor kc vc k v -> KeyValueCursor kc vc k v) -> MapCursor kc vc k v -> MapCursor kc vc k v forall s t a b. ASetter s t a b -> (a -> b) -> s -> t %~ (k -> kc) -> (vc -> v) -> KeyValueCursor kc vc k v -> KeyValueCursor kc vc k v forall k kc vc v. (k -> kc) -> (vc -> v) -> KeyValueCursor kc vc k v -> KeyValueCursor kc vc k v keyValueCursorSelectKey k -> kc g vc -> v h mapCursorSelectValue :: (kc -> k) -> (v -> vc) -> MapCursor kc vc k v -> MapCursor kc vc k v mapCursorSelectValue :: (kc -> k) -> (v -> vc) -> MapCursor kc vc k v -> MapCursor kc vc k v mapCursorSelectValue kc -> k f v -> vc i = (KeyValueCursor kc vc k v -> Identity (KeyValueCursor kc vc k v)) -> MapCursor kc vc k v -> Identity (MapCursor kc vc k v) forall kc vc k v kc' vc'. Lens (MapCursor kc vc k v) (MapCursor kc' vc' k v) (KeyValueCursor kc vc k v) (KeyValueCursor kc' vc' k v) mapCursorElemL ((KeyValueCursor kc vc k v -> Identity (KeyValueCursor kc vc k v)) -> MapCursor kc vc k v -> Identity (MapCursor kc vc k v)) -> (KeyValueCursor kc vc k v -> KeyValueCursor kc vc k v) -> MapCursor kc vc k v -> MapCursor kc vc k v forall s t a b. ASetter s t a b -> (a -> b) -> s -> t %~ (kc -> k) -> (v -> vc) -> KeyValueCursor kc vc k v -> KeyValueCursor kc vc k v forall kc k v vc. (kc -> k) -> (v -> vc) -> KeyValueCursor kc vc k v -> KeyValueCursor kc vc k v keyValueCursorSelectValue kc -> k f v -> vc i mapCursorToggleSelected :: (kc -> k) -> (k -> kc) -> (vc -> v) -> (v -> vc) -> MapCursor kc vc k v -> MapCursor kc vc k v mapCursorToggleSelected :: (kc -> k) -> (k -> kc) -> (vc -> v) -> (v -> vc) -> MapCursor kc vc k v -> MapCursor kc vc k v mapCursorToggleSelected kc -> k f k -> kc g vc -> v h v -> vc i = (KeyValueCursor kc vc k v -> Identity (KeyValueCursor kc vc k v)) -> MapCursor kc vc k v -> Identity (MapCursor kc vc k v) forall kc vc k v kc' vc'. Lens (MapCursor kc vc k v) (MapCursor kc' vc' k v) (KeyValueCursor kc vc k v) (KeyValueCursor kc' vc' k v) mapCursorElemL ((KeyValueCursor kc vc k v -> Identity (KeyValueCursor kc vc k v)) -> MapCursor kc vc k v -> Identity (MapCursor kc vc k v)) -> (KeyValueCursor kc vc k v -> KeyValueCursor kc vc k v) -> MapCursor kc vc k v -> MapCursor kc vc k v forall s t a b. ASetter s t a b -> (a -> b) -> s -> t %~ (kc -> k) -> (k -> kc) -> (vc -> v) -> (v -> vc) -> KeyValueCursor kc vc k v -> KeyValueCursor kc vc k v forall kc k vc v. (kc -> k) -> (k -> kc) -> (vc -> v) -> (v -> vc) -> KeyValueCursor kc vc k v -> KeyValueCursor kc vc k v keyValueCursorToggleSelected kc -> k f k -> kc g vc -> v h v -> vc i mapCursorSelectPrev :: (kc -> k) -> (k -> kc) -> (vc -> v) -> MapCursor kc vc k v -> Maybe (MapCursor kc vc k v) mapCursorSelectPrev :: (kc -> k) -> (k -> kc) -> (vc -> v) -> MapCursor kc vc k v -> Maybe (MapCursor kc vc k v) mapCursorSelectPrev kc -> k f k -> kc g vc -> v h = (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Maybe (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> Maybe (MapCursor kc vc k v) forall kc vc k v lc wc l w. Lens (MapCursor kc vc k v) (MapCursor lc wc l w) (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) (NonEmptyCursor (KeyValueCursor lc wc l w) (l, w)) mapCursorNonEmptyCursorL ((NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Maybe (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> Maybe (MapCursor kc vc k v)) -> (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Maybe (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> Maybe (MapCursor kc vc k v) forall a b. (a -> b) -> a -> b $ (KeyValueCursor kc vc k v -> (k, v)) -> ((k, v) -> KeyValueCursor kc vc k v) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Maybe (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) forall a b. (a -> b) -> (b -> a) -> NonEmptyCursor a b -> Maybe (NonEmptyCursor a b) nonEmptyCursorSelectPrev ((kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) forall kc k vc v. (kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) rebuild kc -> k f vc -> v h) ((k -> kc) -> (k, v) -> KeyValueCursor kc vc k v forall k kc v vc. (k -> kc) -> (k, v) -> KeyValueCursor kc vc k v make k -> kc g) mapCursorSelectNext :: (kc -> k) -> (k -> kc) -> (vc -> v) -> MapCursor kc vc k v -> Maybe (MapCursor kc vc k v) mapCursorSelectNext :: (kc -> k) -> (k -> kc) -> (vc -> v) -> MapCursor kc vc k v -> Maybe (MapCursor kc vc k v) mapCursorSelectNext kc -> k f k -> kc g vc -> v h = (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Maybe (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> Maybe (MapCursor kc vc k v) forall kc vc k v lc wc l w. Lens (MapCursor kc vc k v) (MapCursor lc wc l w) (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) (NonEmptyCursor (KeyValueCursor lc wc l w) (l, w)) mapCursorNonEmptyCursorL ((NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Maybe (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> Maybe (MapCursor kc vc k v)) -> (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Maybe (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> Maybe (MapCursor kc vc k v) forall a b. (a -> b) -> a -> b $ (KeyValueCursor kc vc k v -> (k, v)) -> ((k, v) -> KeyValueCursor kc vc k v) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Maybe (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) forall a b. (a -> b) -> (b -> a) -> NonEmptyCursor a b -> Maybe (NonEmptyCursor a b) nonEmptyCursorSelectNext ((kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) forall kc k vc v. (kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) rebuild kc -> k f vc -> v h) ((k -> kc) -> (k, v) -> KeyValueCursor kc vc k v forall k kc v vc. (k -> kc) -> (k, v) -> KeyValueCursor kc vc k v make k -> kc g) mapCursorSelectFirst :: (kc -> k) -> (k -> kc) -> (vc -> v) -> MapCursor kc vc k v -> MapCursor kc vc k v mapCursorSelectFirst :: (kc -> k) -> (k -> kc) -> (vc -> v) -> MapCursor kc vc k v -> MapCursor kc vc k v mapCursorSelectFirst kc -> k f k -> kc g vc -> v h = (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Identity (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> Identity (MapCursor kc vc k v) forall kc vc k v lc wc l w. Lens (MapCursor kc vc k v) (MapCursor lc wc l w) (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) (NonEmptyCursor (KeyValueCursor lc wc l w) (l, w)) mapCursorNonEmptyCursorL ((NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Identity (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> Identity (MapCursor kc vc k v)) -> (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) -> MapCursor kc vc k v -> MapCursor kc vc k v forall s t a b. ASetter s t a b -> (a -> b) -> s -> t %~ (KeyValueCursor kc vc k v -> (k, v)) -> ((k, v) -> KeyValueCursor kc vc k v) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) forall a b. (a -> b) -> (b -> a) -> NonEmptyCursor a b -> NonEmptyCursor a b nonEmptyCursorSelectFirst ((kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) forall kc k vc v. (kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) rebuild kc -> k f vc -> v h) ((k -> kc) -> (k, v) -> KeyValueCursor kc vc k v forall k kc v vc. (k -> kc) -> (k, v) -> KeyValueCursor kc vc k v make k -> kc g) mapCursorSelectLast :: (kc -> k) -> (k -> kc) -> (vc -> v) -> MapCursor kc vc k v -> MapCursor kc vc k v mapCursorSelectLast :: (kc -> k) -> (k -> kc) -> (vc -> v) -> MapCursor kc vc k v -> MapCursor kc vc k v mapCursorSelectLast kc -> k f k -> kc g vc -> v h = (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Identity (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> Identity (MapCursor kc vc k v) forall kc vc k v lc wc l w. Lens (MapCursor kc vc k v) (MapCursor lc wc l w) (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) (NonEmptyCursor (KeyValueCursor lc wc l w) (l, w)) mapCursorNonEmptyCursorL ((NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Identity (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> Identity (MapCursor kc vc k v)) -> (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) -> MapCursor kc vc k v -> MapCursor kc vc k v forall s t a b. ASetter s t a b -> (a -> b) -> s -> t %~ (KeyValueCursor kc vc k v -> (k, v)) -> ((k, v) -> KeyValueCursor kc vc k v) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) forall a b. (a -> b) -> (b -> a) -> NonEmptyCursor a b -> NonEmptyCursor a b nonEmptyCursorSelectLast ((kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) forall kc k vc v. (kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) rebuild kc -> k f vc -> v h) ((k -> kc) -> (k, v) -> KeyValueCursor kc vc k v forall k kc v vc. (k -> kc) -> (k, v) -> KeyValueCursor kc vc k v make k -> kc g) mapCursorSelection :: MapCursor kc vc k v -> Int mapCursorSelection :: MapCursor kc vc k v -> Int mapCursorSelection = NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Int forall a b. NonEmptyCursor a b -> Int nonEmptyCursorSelection (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Int) -> (MapCursor kc vc k v -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) -> MapCursor kc vc k v -> Int forall b c a. (b -> c) -> (a -> b) -> a -> c . MapCursor kc vc k v -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) forall kc vc k v. MapCursor kc vc k v -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) mapCursorList mapCursorSelectIndex :: (kc -> k) -> (k -> kc) -> (vc -> v) -> Int -> MapCursor kc vc k v -> Maybe (MapCursor kc vc k v) mapCursorSelectIndex :: (kc -> k) -> (k -> kc) -> (vc -> v) -> Int -> MapCursor kc vc k v -> Maybe (MapCursor kc vc k v) mapCursorSelectIndex kc -> k f k -> kc g vc -> v h Int i = (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Maybe (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> Maybe (MapCursor kc vc k v) forall kc vc k v lc wc l w. Lens (MapCursor kc vc k v) (MapCursor lc wc l w) (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) (NonEmptyCursor (KeyValueCursor lc wc l w) (l, w)) mapCursorNonEmptyCursorL ((KeyValueCursor kc vc k v -> (k, v)) -> ((k, v) -> KeyValueCursor kc vc k v) -> Int -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Maybe (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) forall a b. (a -> b) -> (b -> a) -> Int -> NonEmptyCursor a b -> Maybe (NonEmptyCursor a b) nonEmptyCursorSelectIndex ((kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) forall kc k vc v. (kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) rebuild kc -> k f vc -> v h) ((k -> kc) -> (k, v) -> KeyValueCursor kc vc k v forall k kc v vc. (k -> kc) -> (k, v) -> KeyValueCursor kc vc k v make k -> kc g) Int i) mapCursorInsert :: k -> v -> MapCursor kc vc k v -> MapCursor kc vc k v mapCursorInsert :: k -> v -> MapCursor kc vc k v -> MapCursor kc vc k v mapCursorInsert k k v v = (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Identity (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> Identity (MapCursor kc vc k v) forall kc vc k v lc wc l w. Lens (MapCursor kc vc k v) (MapCursor lc wc l w) (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) (NonEmptyCursor (KeyValueCursor lc wc l w) (l, w)) mapCursorNonEmptyCursorL ((NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Identity (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> Identity (MapCursor kc vc k v)) -> (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) -> MapCursor kc vc k v -> MapCursor kc vc k v forall s t a b. ASetter s t a b -> (a -> b) -> s -> t %~ (k, v) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) forall b a. b -> NonEmptyCursor a b -> NonEmptyCursor a b nonEmptyCursorInsert (k k, v v) mapCursorAppend :: k -> v -> MapCursor kc vc k v -> MapCursor kc vc k v mapCursorAppend :: k -> v -> MapCursor kc vc k v -> MapCursor kc vc k v mapCursorAppend k k v v = (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Identity (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> Identity (MapCursor kc vc k v) forall kc vc k v lc wc l w. Lens (MapCursor kc vc k v) (MapCursor lc wc l w) (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) (NonEmptyCursor (KeyValueCursor lc wc l w) (l, w)) mapCursorNonEmptyCursorL ((NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Identity (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> Identity (MapCursor kc vc k v)) -> (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) -> MapCursor kc vc k v -> MapCursor kc vc k v forall s t a b. ASetter s t a b -> (a -> b) -> s -> t %~ (k, v) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) forall b a. b -> NonEmptyCursor a b -> NonEmptyCursor a b nonEmptyCursorAppend (k k, v v) mapCursorInsertAndSelectKey :: (kc -> k) -> (vc -> v) -> kc -> v -> MapCursor kc vc k v -> MapCursor kc vc k v mapCursorInsertAndSelectKey :: (kc -> k) -> (vc -> v) -> kc -> v -> MapCursor kc vc k v -> MapCursor kc vc k v mapCursorInsertAndSelectKey kc -> k f vc -> v h kc kc v v = (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Identity (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> Identity (MapCursor kc vc k v) forall kc vc k v lc wc l w. Lens (MapCursor kc vc k v) (MapCursor lc wc l w) (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) (NonEmptyCursor (KeyValueCursor lc wc l w) (l, w)) mapCursorNonEmptyCursorL ((NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Identity (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> Identity (MapCursor kc vc k v)) -> (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) -> MapCursor kc vc k v -> MapCursor kc vc k v forall s t a b. ASetter s t a b -> (a -> b) -> s -> t %~ (KeyValueCursor kc vc k v -> (k, v)) -> KeyValueCursor kc vc k v -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) forall a b. (a -> b) -> a -> NonEmptyCursor a b -> NonEmptyCursor a b nonEmptyCursorInsertAndSelect ((kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) forall kc k vc v. (kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) rebuild kc -> k f vc -> v h) (kc -> v -> KeyValueCursor kc vc k v forall kc v vc k. kc -> v -> KeyValueCursor kc vc k v makeKeyValueCursorKey kc kc v v) mapCursorAppendAndSelectKey :: (kc -> k) -> (vc -> v) -> kc -> v -> MapCursor kc vc k v -> MapCursor kc vc k v mapCursorAppendAndSelectKey :: (kc -> k) -> (vc -> v) -> kc -> v -> MapCursor kc vc k v -> MapCursor kc vc k v mapCursorAppendAndSelectKey kc -> k f vc -> v h kc kc v v = (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Identity (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> Identity (MapCursor kc vc k v) forall kc vc k v lc wc l w. Lens (MapCursor kc vc k v) (MapCursor lc wc l w) (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) (NonEmptyCursor (KeyValueCursor lc wc l w) (l, w)) mapCursorNonEmptyCursorL ((NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Identity (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> Identity (MapCursor kc vc k v)) -> (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) -> MapCursor kc vc k v -> MapCursor kc vc k v forall s t a b. ASetter s t a b -> (a -> b) -> s -> t %~ (KeyValueCursor kc vc k v -> (k, v)) -> KeyValueCursor kc vc k v -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) forall a b. (a -> b) -> a -> NonEmptyCursor a b -> NonEmptyCursor a b nonEmptyCursorAppendAndSelect ((kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) forall kc k vc v. (kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) rebuild kc -> k f vc -> v h) (kc -> v -> KeyValueCursor kc vc k v forall kc v vc k. kc -> v -> KeyValueCursor kc vc k v makeKeyValueCursorKey kc kc v v) mapCursorInsertAndSelectValue :: (kc -> k) -> (vc -> v) -> k -> vc -> MapCursor kc vc k v -> MapCursor kc vc k v mapCursorInsertAndSelectValue :: (kc -> k) -> (vc -> v) -> k -> vc -> MapCursor kc vc k v -> MapCursor kc vc k v mapCursorInsertAndSelectValue kc -> k f vc -> v h k k vc vc = (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Identity (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> Identity (MapCursor kc vc k v) forall kc vc k v lc wc l w. Lens (MapCursor kc vc k v) (MapCursor lc wc l w) (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) (NonEmptyCursor (KeyValueCursor lc wc l w) (l, w)) mapCursorNonEmptyCursorL ((NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Identity (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> Identity (MapCursor kc vc k v)) -> (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) -> MapCursor kc vc k v -> MapCursor kc vc k v forall s t a b. ASetter s t a b -> (a -> b) -> s -> t %~ (KeyValueCursor kc vc k v -> (k, v)) -> KeyValueCursor kc vc k v -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) forall a b. (a -> b) -> a -> NonEmptyCursor a b -> NonEmptyCursor a b nonEmptyCursorInsertAndSelect ((kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) forall kc k vc v. (kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) rebuild kc -> k f vc -> v h) (k -> vc -> KeyValueCursor kc vc k v forall k vc kc v. k -> vc -> KeyValueCursor kc vc k v makeKeyValueCursorValue k k vc vc) mapCursorAppendAndSelectValue :: (kc -> k) -> (vc -> v) -> k -> vc -> MapCursor kc vc k v -> MapCursor kc vc k v mapCursorAppendAndSelectValue :: (kc -> k) -> (vc -> v) -> k -> vc -> MapCursor kc vc k v -> MapCursor kc vc k v mapCursorAppendAndSelectValue kc -> k f vc -> v h k k vc vc = (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Identity (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> Identity (MapCursor kc vc k v) forall kc vc k v lc wc l w. Lens (MapCursor kc vc k v) (MapCursor lc wc l w) (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) (NonEmptyCursor (KeyValueCursor lc wc l w) (l, w)) mapCursorNonEmptyCursorL ((NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Identity (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> Identity (MapCursor kc vc k v)) -> (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) -> MapCursor kc vc k v -> MapCursor kc vc k v forall s t a b. ASetter s t a b -> (a -> b) -> s -> t %~ (KeyValueCursor kc vc k v -> (k, v)) -> KeyValueCursor kc vc k v -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) forall a b. (a -> b) -> a -> NonEmptyCursor a b -> NonEmptyCursor a b nonEmptyCursorAppendAndSelect ((kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) forall kc k vc v. (kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) rebuild kc -> k f vc -> v h) (k -> vc -> KeyValueCursor kc vc k v forall k vc kc v. k -> vc -> KeyValueCursor kc vc k v makeKeyValueCursorValue k k vc vc) mapCursorRemoveElemAndSelectPrev :: (k -> kc) -> MapCursor kc vc k v -> Maybe (DeleteOrUpdate (MapCursor kc vc k v)) mapCursorRemoveElemAndSelectPrev :: (k -> kc) -> MapCursor kc vc k v -> Maybe (DeleteOrUpdate (MapCursor kc vc k v)) mapCursorRemoveElemAndSelectPrev k -> kc g = Lens' (MapCursor kc vc k v) (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) -> (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Maybe (DeleteOrUpdate (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)))) -> MapCursor kc vc k v -> Maybe (DeleteOrUpdate (MapCursor kc vc k v)) forall b a. Lens' b a -> (a -> Maybe (DeleteOrUpdate a)) -> b -> Maybe (DeleteOrUpdate b) focusPossibleDeleteOrUpdate forall kc vc k v lc wc l w. Lens (MapCursor kc vc k v) (MapCursor lc wc l w) (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) (NonEmptyCursor (KeyValueCursor lc wc l w) (l, w)) Lens' (MapCursor kc vc k v) (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) mapCursorNonEmptyCursorL ((NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Maybe (DeleteOrUpdate (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)))) -> MapCursor kc vc k v -> Maybe (DeleteOrUpdate (MapCursor kc vc k v))) -> (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Maybe (DeleteOrUpdate (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)))) -> MapCursor kc vc k v -> Maybe (DeleteOrUpdate (MapCursor kc vc k v)) forall a b. (a -> b) -> a -> b $ ((k, v) -> KeyValueCursor kc vc k v) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Maybe (DeleteOrUpdate (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) forall b a. (b -> a) -> NonEmptyCursor a b -> Maybe (DeleteOrUpdate (NonEmptyCursor a b)) nonEmptyCursorRemoveElemAndSelectPrev ((k -> kc) -> (k, v) -> KeyValueCursor kc vc k v forall k kc v vc. (k -> kc) -> (k, v) -> KeyValueCursor kc vc k v make k -> kc g) mapCursorDeleteElemAndSelectNext :: (k -> kc) -> MapCursor kc vc k v -> Maybe (DeleteOrUpdate (MapCursor kc vc k v)) mapCursorDeleteElemAndSelectNext :: (k -> kc) -> MapCursor kc vc k v -> Maybe (DeleteOrUpdate (MapCursor kc vc k v)) mapCursorDeleteElemAndSelectNext k -> kc g = Lens' (MapCursor kc vc k v) (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) -> (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Maybe (DeleteOrUpdate (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)))) -> MapCursor kc vc k v -> Maybe (DeleteOrUpdate (MapCursor kc vc k v)) forall b a. Lens' b a -> (a -> Maybe (DeleteOrUpdate a)) -> b -> Maybe (DeleteOrUpdate b) focusPossibleDeleteOrUpdate forall kc vc k v lc wc l w. Lens (MapCursor kc vc k v) (MapCursor lc wc l w) (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) (NonEmptyCursor (KeyValueCursor lc wc l w) (l, w)) Lens' (MapCursor kc vc k v) (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) mapCursorNonEmptyCursorL ((NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Maybe (DeleteOrUpdate (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)))) -> MapCursor kc vc k v -> Maybe (DeleteOrUpdate (MapCursor kc vc k v))) -> (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Maybe (DeleteOrUpdate (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)))) -> MapCursor kc vc k v -> Maybe (DeleteOrUpdate (MapCursor kc vc k v)) forall a b. (a -> b) -> a -> b $ ((k, v) -> KeyValueCursor kc vc k v) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Maybe (DeleteOrUpdate (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) forall b a. (b -> a) -> NonEmptyCursor a b -> Maybe (DeleteOrUpdate (NonEmptyCursor a b)) nonEmptyCursorDeleteElemAndSelectNext ((k -> kc) -> (k, v) -> KeyValueCursor kc vc k v forall k kc v vc. (k -> kc) -> (k, v) -> KeyValueCursor kc vc k v make k -> kc g) mapCursorRemoveElem :: (k -> kc) -> MapCursor kc vc k v -> DeleteOrUpdate (MapCursor kc vc k v) mapCursorRemoveElem :: (k -> kc) -> MapCursor kc vc k v -> DeleteOrUpdate (MapCursor kc vc k v) mapCursorRemoveElem k -> kc g = (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> DeleteOrUpdate (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> DeleteOrUpdate (MapCursor kc vc k v) forall kc vc k v lc wc l w. Lens (MapCursor kc vc k v) (MapCursor lc wc l w) (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) (NonEmptyCursor (KeyValueCursor lc wc l w) (l, w)) mapCursorNonEmptyCursorL ((NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> DeleteOrUpdate (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> DeleteOrUpdate (MapCursor kc vc k v)) -> (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> DeleteOrUpdate (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> DeleteOrUpdate (MapCursor kc vc k v) forall a b. (a -> b) -> a -> b $ ((k, v) -> KeyValueCursor kc vc k v) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> DeleteOrUpdate (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) forall b a. (b -> a) -> NonEmptyCursor a b -> DeleteOrUpdate (NonEmptyCursor a b) nonEmptyCursorRemoveElem ((k -> kc) -> (k, v) -> KeyValueCursor kc vc k v forall k kc v vc. (k -> kc) -> (k, v) -> KeyValueCursor kc vc k v make k -> kc g) mapCursorDeleteElem :: (k -> kc) -> MapCursor kc vc k v -> DeleteOrUpdate (MapCursor kc vc k v) mapCursorDeleteElem :: (k -> kc) -> MapCursor kc vc k v -> DeleteOrUpdate (MapCursor kc vc k v) mapCursorDeleteElem k -> kc g = (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> DeleteOrUpdate (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> DeleteOrUpdate (MapCursor kc vc k v) forall kc vc k v lc wc l w. Lens (MapCursor kc vc k v) (MapCursor lc wc l w) (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) (NonEmptyCursor (KeyValueCursor lc wc l w) (l, w)) mapCursorNonEmptyCursorL ((NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> DeleteOrUpdate (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> DeleteOrUpdate (MapCursor kc vc k v)) -> (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> DeleteOrUpdate (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> DeleteOrUpdate (MapCursor kc vc k v) forall a b. (a -> b) -> a -> b $ ((k, v) -> KeyValueCursor kc vc k v) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> DeleteOrUpdate (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) forall b a. (b -> a) -> NonEmptyCursor a b -> DeleteOrUpdate (NonEmptyCursor a b) nonEmptyCursorDeleteElem ((k -> kc) -> (k, v) -> KeyValueCursor kc vc k v forall k kc v vc. (k -> kc) -> (k, v) -> KeyValueCursor kc vc k v make k -> kc g) mapCursorSearch :: (kc -> k) -> (k -> kc) -> (vc -> v) -> (k -> v -> Bool) -> MapCursor kc vc k v -> Maybe (MapCursor kc vc k v) mapCursorSearch :: (kc -> k) -> (k -> kc) -> (vc -> v) -> (k -> v -> Bool) -> MapCursor kc vc k v -> Maybe (MapCursor kc vc k v) mapCursorSearch kc -> k f k -> kc g vc -> v h k -> v -> Bool p = (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Maybe (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> Maybe (MapCursor kc vc k v) forall kc vc k v lc wc l w. Lens (MapCursor kc vc k v) (MapCursor lc wc l w) (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) (NonEmptyCursor (KeyValueCursor lc wc l w) (l, w)) mapCursorNonEmptyCursorL ((NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Maybe (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> Maybe (MapCursor kc vc k v)) -> (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Maybe (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> Maybe (MapCursor kc vc k v) forall a b. (a -> b) -> a -> b $ (KeyValueCursor kc vc k v -> (k, v)) -> ((k, v) -> KeyValueCursor kc vc k v) -> (KeyValueCursor kc vc k v -> Bool) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Maybe (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) forall a b. (a -> b) -> (b -> a) -> (a -> Bool) -> NonEmptyCursor a b -> Maybe (NonEmptyCursor a b) nonEmptyCursorSearch ((kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) forall kc k vc v. (kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) rebuild kc -> k f vc -> v h) ((k -> kc) -> (k, v) -> KeyValueCursor kc vc k v forall k kc v vc. (k -> kc) -> (k, v) -> KeyValueCursor kc vc k v make k -> kc g) ((k -> v -> Bool) -> (k, v) -> Bool forall a b c. (a -> b -> c) -> (a, b) -> c uncurry k -> v -> Bool p ((k, v) -> Bool) -> (KeyValueCursor kc vc k v -> (k, v)) -> KeyValueCursor kc vc k v -> Bool forall b c a. (b -> c) -> (a -> b) -> a -> c . (kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) forall kc k vc v. (kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) rebuild kc -> k f vc -> v h) mapCursorSelectOrAdd :: (kc -> k) -> (k -> kc) -> (vc -> v) -> (k -> v -> Bool) -> KeyValueCursor kc vc k v -> MapCursor kc vc k v -> MapCursor kc vc k v mapCursorSelectOrAdd :: (kc -> k) -> (k -> kc) -> (vc -> v) -> (k -> v -> Bool) -> KeyValueCursor kc vc k v -> MapCursor kc vc k v -> MapCursor kc vc k v mapCursorSelectOrAdd kc -> k f k -> kc g vc -> v h k -> v -> Bool p KeyValueCursor kc vc k v kvc = (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Identity (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> Identity (MapCursor kc vc k v) forall kc vc k v lc wc l w. Lens (MapCursor kc vc k v) (MapCursor lc wc l w) (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) (NonEmptyCursor (KeyValueCursor lc wc l w) (l, w)) mapCursorNonEmptyCursorL ((NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> Identity (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v))) -> MapCursor kc vc k v -> Identity (MapCursor kc vc k v)) -> (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) -> MapCursor kc vc k v -> MapCursor kc vc k v forall s t a b. ASetter s t a b -> (a -> b) -> s -> t %~ (KeyValueCursor kc vc k v -> (k, v)) -> ((k, v) -> KeyValueCursor kc vc k v) -> (KeyValueCursor kc vc k v -> Bool) -> KeyValueCursor kc vc k v -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) forall a b. (a -> b) -> (b -> a) -> (a -> Bool) -> a -> NonEmptyCursor a b -> NonEmptyCursor a b nonEmptyCursorSelectOrAdd ((kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) forall kc k vc v. (kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) rebuild kc -> k f vc -> v h) ((k -> kc) -> (k, v) -> KeyValueCursor kc vc k v forall k kc v vc. (k -> kc) -> (k, v) -> KeyValueCursor kc vc k v make k -> kc g) ((k -> v -> Bool) -> (k, v) -> Bool forall a b c. (a -> b -> c) -> (a, b) -> c uncurry k -> v -> Bool p ((k, v) -> Bool) -> (KeyValueCursor kc vc k v -> (k, v)) -> KeyValueCursor kc vc k v -> Bool forall b c a. (b -> c) -> (a -> b) -> a -> c . (kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) forall kc k vc v. (kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) rebuild kc -> k f vc -> v h) KeyValueCursor kc vc k v kvc rebuild :: (kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) rebuild :: (kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) rebuild = (kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) forall kc k vc v. (kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v) rebuildKeyValueCursor make :: (k -> kc) -> (k, v) -> KeyValueCursor kc vc k v make :: (k -> kc) -> (k, v) -> KeyValueCursor kc vc k v make k -> kc g (k k, v v) = kc -> v -> KeyValueCursor kc vc k v forall kc v vc k. kc -> v -> KeyValueCursor kc vc k v makeKeyValueCursorKey (k -> kc g k k) v v traverseMapCursor :: ([(k, v)] -> KeyValueCursor kc vc k v -> [(k, v)] -> f c) -> MapCursor kc vc k v -> f c traverseMapCursor :: ([(k, v)] -> KeyValueCursor kc vc k v -> [(k, v)] -> f c) -> MapCursor kc vc k v -> f c traverseMapCursor [(k, v)] -> KeyValueCursor kc vc k v -> [(k, v)] -> f c combFunc = ([(k, v)] -> KeyValueCursor kc vc k v -> [(k, v)] -> f c) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> f c forall b a c. ([b] -> a -> [b] -> c) -> NonEmptyCursor a b -> c foldNonEmptyCursor [(k, v)] -> KeyValueCursor kc vc k v -> [(k, v)] -> f c combFunc (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> f c) -> (MapCursor kc vc k v -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) -> MapCursor kc vc k v -> f c forall b c a. (b -> c) -> (a -> b) -> a -> c . MapCursor kc vc k v -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) forall kc vc k v. MapCursor kc vc k v -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) mapCursorList mapCursorTraverseKeyCase :: Applicative f => (kc -> v -> f (kc', v)) -> MapCursor kc vc k v -> f (MapCursor kc' vc k v) mapCursorTraverseKeyCase :: (kc -> v -> f (kc', v)) -> MapCursor kc vc k v -> f (MapCursor kc' vc k v) mapCursorTraverseKeyCase kc -> v -> f (kc', v) func = (KeyValueCursor kc vc k v -> f (KeyValueCursor kc' vc k v)) -> MapCursor kc vc k v -> f (MapCursor kc' vc k v) forall kc vc k v kc' vc'. Lens (MapCursor kc vc k v) (MapCursor kc' vc' k v) (KeyValueCursor kc vc k v) (KeyValueCursor kc' vc' k v) mapCursorElemL ((KeyValueCursor kc vc k v -> f (KeyValueCursor kc' vc k v)) -> MapCursor kc vc k v -> f (MapCursor kc' vc k v)) -> (KeyValueCursor kc vc k v -> f (KeyValueCursor kc' vc k v)) -> MapCursor kc vc k v -> f (MapCursor kc' vc k v) forall a b. (a -> b) -> a -> b $ (kc -> v -> f (kc', v)) -> KeyValueCursor kc vc k v -> f (KeyValueCursor kc' vc k v) forall (f :: * -> *) kc v kc' v' vc k. Applicative f => (kc -> v -> f (kc', v')) -> KeyValueCursor kc vc k v -> f (KeyValueCursor kc' vc k v') keyValueCursorTraverseKeyCase kc -> v -> f (kc', v) func mapCursorTraverseValueCase :: Applicative f => (k -> vc -> f (k, vc')) -> MapCursor kc vc k v -> f (MapCursor kc vc' k v) mapCursorTraverseValueCase :: (k -> vc -> f (k, vc')) -> MapCursor kc vc k v -> f (MapCursor kc vc' k v) mapCursorTraverseValueCase k -> vc -> f (k, vc') func = (KeyValueCursor kc vc k v -> f (KeyValueCursor kc vc' k v)) -> MapCursor kc vc k v -> f (MapCursor kc vc' k v) forall kc vc k v kc' vc'. Lens (MapCursor kc vc k v) (MapCursor kc' vc' k v) (KeyValueCursor kc vc k v) (KeyValueCursor kc' vc' k v) mapCursorElemL ((KeyValueCursor kc vc k v -> f (KeyValueCursor kc vc' k v)) -> MapCursor kc vc k v -> f (MapCursor kc vc' k v)) -> (KeyValueCursor kc vc k v -> f (KeyValueCursor kc vc' k v)) -> MapCursor kc vc k v -> f (MapCursor kc vc' k v) forall a b. (a -> b) -> a -> b $ (k -> vc -> f (k, vc')) -> KeyValueCursor kc vc k v -> f (KeyValueCursor kc vc' k v) forall (f :: * -> *) k vc k' vc' kc v. Applicative f => (k -> vc -> f (k', vc')) -> KeyValueCursor kc vc k v -> f (KeyValueCursor kc vc' k' v) keyValueCursorTraverseValueCase k -> vc -> f (k, vc') func foldMapCursor :: ([(k, v)] -> KeyValueCursor kc vc k v -> [(k, v)] -> c) -> MapCursor kc vc k v -> c foldMapCursor :: ([(k, v)] -> KeyValueCursor kc vc k v -> [(k, v)] -> c) -> MapCursor kc vc k v -> c foldMapCursor [(k, v)] -> KeyValueCursor kc vc k v -> [(k, v)] -> c combFunc = ([(k, v)] -> KeyValueCursor kc vc k v -> [(k, v)] -> c) -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> c forall b a c. ([b] -> a -> [b] -> c) -> NonEmptyCursor a b -> c foldNonEmptyCursor [(k, v)] -> KeyValueCursor kc vc k v -> [(k, v)] -> c combFunc (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> c) -> (MapCursor kc vc k v -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) -> MapCursor kc vc k v -> c forall b c a. (b -> c) -> (a -> b) -> a -> c . MapCursor kc vc k v -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) forall kc vc k v. MapCursor kc vc k v -> NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) mapCursorList