{-# 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