{-# LANGUAGE PatternSynonyms #-}

module Cursor.Simple.Map.KeyValue
  ( KeyValueCursor,
    pattern KVC.KeyValueCursorKey,
    pattern KVC.KeyValueCursorValue,
    KVC.makeKeyValueCursorKey,
    KVC.makeKeyValueCursorValue,
    rebuildKeyValueCursor,
    KVC.keyValueCursorSelection,
    mapKeyValueCursor,
    keyValueCursorSelectKey,
    keyValueCursorSelectValue,
    keyValueCursorToggleSelected,
    KVC.KeyValueToggle (..),
  )
where

import qualified Cursor.Map.KeyValue as KVC

type KeyValueCursor k v = KVC.KeyValueCursor k v k v

rebuildKeyValueCursor :: KeyValueCursor k v -> (k, v)
rebuildKeyValueCursor :: KeyValueCursor k v -> (k, v)
rebuildKeyValueCursor = (k -> k) -> (v -> v) -> KeyValueCursor k v -> (k, v)
forall kc k vc v.
(kc -> k) -> (vc -> v) -> KeyValueCursor kc vc k v -> (k, v)
KVC.rebuildKeyValueCursor k -> k
forall a. a -> a
id v -> v
forall a. a -> a
id

mapKeyValueCursor :: (k -> l) -> (v -> w) -> KeyValueCursor k v -> KeyValueCursor l w
mapKeyValueCursor :: (k -> l) -> (v -> w) -> KeyValueCursor k v -> KeyValueCursor l w
mapKeyValueCursor k -> l
f v -> w
g = (k -> l)
-> (v -> w)
-> (k -> l)
-> (v -> w)
-> KeyValueCursor k v
-> KeyValueCursor 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
KVC.mapKeyValueCursor k -> l
f v -> w
g k -> l
f v -> w
g

keyValueCursorSelectKey :: KeyValueCursor k v -> KeyValueCursor k v
keyValueCursorSelectKey :: KeyValueCursor k v -> KeyValueCursor k v
keyValueCursorSelectKey = (k -> k) -> (v -> v) -> KeyValueCursor k v -> KeyValueCursor k v
forall k kc vc v.
(k -> kc)
-> (vc -> v)
-> KeyValueCursor kc vc k v
-> KeyValueCursor kc vc k v
KVC.keyValueCursorSelectKey k -> k
forall a. a -> a
id v -> v
forall a. a -> a
id

keyValueCursorSelectValue :: KeyValueCursor k v -> KeyValueCursor k v
keyValueCursorSelectValue :: KeyValueCursor k v -> KeyValueCursor k v
keyValueCursorSelectValue = (k -> k) -> (v -> v) -> KeyValueCursor k v -> KeyValueCursor k v
forall kc k v vc.
(kc -> k)
-> (v -> vc)
-> KeyValueCursor kc vc k v
-> KeyValueCursor kc vc k v
KVC.keyValueCursorSelectValue k -> k
forall a. a -> a
id v -> v
forall a. a -> a
id

keyValueCursorToggleSelected :: KeyValueCursor k v -> KeyValueCursor k v
keyValueCursorToggleSelected :: KeyValueCursor k v -> KeyValueCursor k v
keyValueCursorToggleSelected = (k -> k)
-> (k -> k)
-> (v -> v)
-> (v -> v)
-> KeyValueCursor k v
-> KeyValueCursor 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
KVC.keyValueCursorToggleSelected k -> k
forall a. a -> a
id k -> k
forall a. a -> a
id v -> v
forall a. a -> a
id v -> v
forall a. a -> a
id