{-# LANGUAGE TypeFamilies #-}

module Cursor.Simple.Tree
  ( TreeCursor,
    TreeAbove (..),
    singletonTreeCursor,
    makeTreeCursor,
    TC.makeNodeTreeCursor,
    makeTreeCursorWithSelection,
    rebuildTreeCursor,
    TC.drawTreeCursor,
    mapTreeCursor,
    TC.treeCursorAboveL,
    TC.treeCursorCurrentL,
    TC.treeCursorBelowL,
    TC.treeAboveLeftsL,
    TC.treeAboveAboveL,
    TC.treeAboveNodeL,
    TC.treeAboveRightsL,
    TC.treeCursorWithPointer,
    TC.treeCursorSelection,
    TC.TreeCursorSelection (..),
    treeCursorSelect,
    treeCursorSelectPrev,
    treeCursorSelectNext,
    treeCursorSelectFirst,
    treeCursorSelectLast,
    treeCursorSelectAbove,
    treeCursorSelectBelowAtPos,
    treeCursorSelectBelowAtStart,
    treeCursorSelectBelowAtEnd,
    treeCursorSelectBelowAtStartRecursively,
    treeCursorSelectBelowAtEndRecursively,
    treeCursorSelectPrevOnSameLevel,
    treeCursorSelectNextOnSameLevel,
    treeCursorSelectFirstOnSameLevel,
    treeCursorSelectLastOnSameLevel,
    treeCursorSelectAbovePrev,
    treeCursorSelectAboveNext,
    TC.treeCursorOpenCurrentForest,
    TC.treeCursorCloseCurrentForest,
    TC.treeCursorToggleCurrentForest,
    TC.treeCursorOpenCurrentForestRecursively,
    TC.treeCursorToggleCurrentForestRecursively,
    TC.treeCursorInsert,
    treeCursorInsertAndSelect,
    treeCursorInsertNodeSingleAndSelect,
    treeCursorInsertNodeAndSelect,
    TC.treeCursorAppend,
    treeCursorAppendAndSelect,
    treeCursorAppendNodeSingleAndSelect,
    treeCursorAppendNodeAndSelect,
    TC.treeCursorAddChildAtPos,
    TC.treeCursorAddChildAtStart,
    TC.treeCursorAddChildAtEnd,
    treeCursorAddChildAtPosAndSelect,
    treeCursorAddChildAtStartAndSelect,
    treeCursorAddChildAtEndAndSelect,
    treeCursorAddChildNodeSingleAtPosAndSelect,
    treeCursorAddChildNodeSingleAtStartAndSelect,
    treeCursorAddChildNodeSingleAtEndAndSelect,
    treeCursorAddChildNodeAtPosAndSelect,
    treeCursorAddChildNodeAtStartAndSelect,
    treeCursorAddChildNodeAtEndAndSelect,
    treeCursorDeleteSubTreeAndSelectPrevious,
    treeCursorDeleteSubTreeAndSelectNext,
    treeCursorDeleteSubTreeAndSelectAbove,
    treeCursorRemoveSubTree,
    treeCursorDeleteSubTree,
    treeCursorDeleteElemAndSelectPrevious,
    treeCursorDeleteElemAndSelectNext,
    treeCursorDeleteElemAndSelectAbove,
    treeCursorRemoveElem,
    treeCursorDeleteElem,
    TC.treeCursorSwapPrev,
    TC.treeCursorSwapNext,
    TC.SwapResult (..),
    treeCursorPromoteElem,
    TC.PromoteElemResult (..),
    treeCursorPromoteSubTree,
    TC.PromoteResult (..),
    treeCursorDemoteElem,
    treeCursorDemoteSubTree,
    TC.DemoteResult (..),
    TC.treeCursorDemoteElemUnder,
    TC.treeCursorDemoteSubTreeUnder,
    TC.CTree (..),
    TC.CForest,
    TC.makeCTree,
    TC.cTree,
    TC.rebuildCTree,
  )
where

import Cursor.Tree (CForest (..), CTree, TreeAbove (..))
import qualified Cursor.Tree as TC
import Cursor.Types
import Data.Tree

type TreeCursor a = TC.TreeCursor a a

makeTreeCursor :: CTree a -> TreeCursor a
makeTreeCursor :: CTree a -> TreeCursor a
makeTreeCursor = (a -> a) -> CTree a -> TreeCursor a
forall b a. (b -> a) -> CTree b -> TreeCursor a b
TC.makeTreeCursor a -> a
forall a. a -> a
id

makeTreeCursorWithSelection :: TC.TreeCursorSelection -> CTree a -> Maybe (TreeCursor a)
makeTreeCursorWithSelection :: TreeCursorSelection -> CTree a -> Maybe (TreeCursor a)
makeTreeCursorWithSelection = (a -> a)
-> (a -> a)
-> TreeCursorSelection
-> CTree a
-> Maybe (TreeCursor a)
forall a b.
(a -> b)
-> (b -> a)
-> TreeCursorSelection
-> CTree b
-> Maybe (TreeCursor a b)
TC.makeTreeCursorWithSelection a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

singletonTreeCursor :: a -> TreeCursor a
singletonTreeCursor :: a -> TreeCursor a
singletonTreeCursor = a -> TreeCursor a
forall a b. a -> TreeCursor a b
TC.singletonTreeCursor

rebuildTreeCursor :: TreeCursor a -> CTree a
rebuildTreeCursor :: TreeCursor a -> CTree a
rebuildTreeCursor = (a -> a) -> TreeCursor a -> CTree a
forall a b. (a -> b) -> TreeCursor a b -> CTree b
TC.rebuildTreeCursor a -> a
forall a. a -> a
id

mapTreeCursor :: (a -> b) -> TreeCursor a -> TreeCursor b
mapTreeCursor :: (a -> b) -> TreeCursor a -> TreeCursor b
mapTreeCursor a -> b
f = (a -> b) -> (a -> b) -> TreeCursor a -> TreeCursor b
forall a c b d.
(a -> c) -> (b -> d) -> TreeCursor a b -> TreeCursor c d
TC.mapTreeCursor a -> b
f a -> b
f

treeCursorSelect :: TC.TreeCursorSelection -> TreeCursor a -> Maybe (TreeCursor a)
treeCursorSelect :: TreeCursorSelection -> TreeCursor a -> Maybe (TreeCursor a)
treeCursorSelect = (a -> a)
-> (a -> a)
-> TreeCursorSelection
-> TreeCursor a
-> Maybe (TreeCursor a)
forall a b.
(a -> b)
-> (b -> a)
-> TreeCursorSelection
-> TreeCursor a b
-> Maybe (TreeCursor a b)
TC.treeCursorSelect a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

treeCursorSelectPrev :: TreeCursor a -> Maybe (TreeCursor a)
treeCursorSelectPrev :: TreeCursor a -> Maybe (TreeCursor a)
treeCursorSelectPrev = (a -> a) -> (a -> a) -> TreeCursor a -> Maybe (TreeCursor a)
forall a b.
(a -> b) -> (b -> a) -> TreeCursor a b -> Maybe (TreeCursor a b)
TC.treeCursorSelectPrev a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

treeCursorSelectNext :: TreeCursor a -> Maybe (TreeCursor a)
treeCursorSelectNext :: TreeCursor a -> Maybe (TreeCursor a)
treeCursorSelectNext = (a -> a) -> (a -> a) -> TreeCursor a -> Maybe (TreeCursor a)
forall a b.
(a -> b) -> (b -> a) -> TreeCursor a b -> Maybe (TreeCursor a b)
TC.treeCursorSelectNext a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

treeCursorSelectFirst :: TreeCursor a -> TreeCursor a
treeCursorSelectFirst :: TreeCursor a -> TreeCursor a
treeCursorSelectFirst = (a -> a) -> (a -> a) -> TreeCursor a -> TreeCursor a
forall a b.
(a -> b) -> (b -> a) -> TreeCursor a b -> TreeCursor a b
TC.treeCursorSelectFirst a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

treeCursorSelectLast :: TreeCursor a -> TreeCursor a
treeCursorSelectLast :: TreeCursor a -> TreeCursor a
treeCursorSelectLast = (a -> a) -> (a -> a) -> TreeCursor a -> TreeCursor a
forall a b.
(a -> b) -> (b -> a) -> TreeCursor a b -> TreeCursor a b
TC.treeCursorSelectLast a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

treeCursorSelectAbove :: TreeCursor a -> Maybe (TreeCursor a)
treeCursorSelectAbove :: TreeCursor a -> Maybe (TreeCursor a)
treeCursorSelectAbove = (a -> a) -> (a -> a) -> TreeCursor a -> Maybe (TreeCursor a)
forall a b.
(a -> b) -> (b -> a) -> TreeCursor a b -> Maybe (TreeCursor a b)
TC.treeCursorSelectAbove a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

treeCursorSelectBelowAtPos :: Int -> TreeCursor a -> Maybe (TreeCursor a)
treeCursorSelectBelowAtPos :: Int -> TreeCursor a -> Maybe (TreeCursor a)
treeCursorSelectBelowAtPos = (a -> a) -> (a -> a) -> Int -> TreeCursor a -> Maybe (TreeCursor a)
forall a b.
(a -> b)
-> (b -> a) -> Int -> TreeCursor a b -> Maybe (TreeCursor a b)
TC.treeCursorSelectBelowAtPos a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

treeCursorSelectBelowAtStart :: TreeCursor a -> Maybe (TreeCursor a)
treeCursorSelectBelowAtStart :: TreeCursor a -> Maybe (TreeCursor a)
treeCursorSelectBelowAtStart = (a -> a) -> (a -> a) -> TreeCursor a -> Maybe (TreeCursor a)
forall a b.
(a -> b) -> (b -> a) -> TreeCursor a b -> Maybe (TreeCursor a b)
TC.treeCursorSelectBelowAtStart a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

treeCursorSelectBelowAtEnd :: TreeCursor a -> Maybe (TreeCursor a)
treeCursorSelectBelowAtEnd :: TreeCursor a -> Maybe (TreeCursor a)
treeCursorSelectBelowAtEnd = (a -> a) -> (a -> a) -> TreeCursor a -> Maybe (TreeCursor a)
forall a b.
(a -> b) -> (b -> a) -> TreeCursor a b -> Maybe (TreeCursor a b)
TC.treeCursorSelectBelowAtEnd a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

treeCursorSelectBelowAtStartRecursively :: TreeCursor a -> Maybe (TreeCursor a)
treeCursorSelectBelowAtStartRecursively :: TreeCursor a -> Maybe (TreeCursor a)
treeCursorSelectBelowAtStartRecursively = (a -> a) -> (a -> a) -> TreeCursor a -> Maybe (TreeCursor a)
forall a b.
(a -> b) -> (b -> a) -> TreeCursor a b -> Maybe (TreeCursor a b)
TC.treeCursorSelectBelowAtStartRecursively a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

treeCursorSelectBelowAtEndRecursively :: TreeCursor a -> Maybe (TreeCursor a)
treeCursorSelectBelowAtEndRecursively :: TreeCursor a -> Maybe (TreeCursor a)
treeCursorSelectBelowAtEndRecursively = (a -> a) -> (a -> a) -> TreeCursor a -> Maybe (TreeCursor a)
forall a b.
(a -> b) -> (b -> a) -> TreeCursor a b -> Maybe (TreeCursor a b)
TC.treeCursorSelectBelowAtEndRecursively a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

treeCursorSelectPrevOnSameLevel :: TreeCursor a -> Maybe (TreeCursor a)
treeCursorSelectPrevOnSameLevel :: TreeCursor a -> Maybe (TreeCursor a)
treeCursorSelectPrevOnSameLevel = (a -> a) -> (a -> a) -> TreeCursor a -> Maybe (TreeCursor a)
forall a b.
(a -> b) -> (b -> a) -> TreeCursor a b -> Maybe (TreeCursor a b)
TC.treeCursorSelectPrevOnSameLevel a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

treeCursorSelectNextOnSameLevel :: TreeCursor a -> Maybe (TreeCursor a)
treeCursorSelectNextOnSameLevel :: TreeCursor a -> Maybe (TreeCursor a)
treeCursorSelectNextOnSameLevel = (a -> a) -> (a -> a) -> TreeCursor a -> Maybe (TreeCursor a)
forall a b.
(a -> b) -> (b -> a) -> TreeCursor a b -> Maybe (TreeCursor a b)
TC.treeCursorSelectNextOnSameLevel a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

treeCursorSelectFirstOnSameLevel :: TreeCursor a -> TreeCursor a
treeCursorSelectFirstOnSameLevel :: TreeCursor a -> TreeCursor a
treeCursorSelectFirstOnSameLevel = (a -> a) -> (a -> a) -> TreeCursor a -> TreeCursor a
forall a b.
(a -> b) -> (b -> a) -> TreeCursor a b -> TreeCursor a b
TC.treeCursorSelectFirstOnSameLevel a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

treeCursorSelectLastOnSameLevel :: TreeCursor a -> TreeCursor a
treeCursorSelectLastOnSameLevel :: TreeCursor a -> TreeCursor a
treeCursorSelectLastOnSameLevel = (a -> a) -> (a -> a) -> TreeCursor a -> TreeCursor a
forall a b.
(a -> b) -> (b -> a) -> TreeCursor a b -> TreeCursor a b
TC.treeCursorSelectLastOnSameLevel a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

-- | Go back and down as far as necessary to find a previous element on a level below
treeCursorSelectAbovePrev :: TreeCursor a -> Maybe (TreeCursor a)
treeCursorSelectAbovePrev :: TreeCursor a -> Maybe (TreeCursor a)
treeCursorSelectAbovePrev = (a -> a) -> (a -> a) -> TreeCursor a -> Maybe (TreeCursor a)
forall a b.
(a -> b) -> (b -> a) -> TreeCursor a b -> Maybe (TreeCursor a b)
TC.treeCursorSelectAbovePrev a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

-- | Go up as far as necessary to find a next element on a level above and forward
--
-- Note: This will fail if there is a next node on the same level or any node below the current node
treeCursorSelectAboveNext :: TreeCursor a -> Maybe (TreeCursor a)
treeCursorSelectAboveNext :: TreeCursor a -> Maybe (TreeCursor a)
treeCursorSelectAboveNext = (a -> a) -> (a -> a) -> TreeCursor a -> Maybe (TreeCursor a)
forall a b.
(a -> b) -> (b -> a) -> TreeCursor a b -> Maybe (TreeCursor a b)
TC.treeCursorSelectAboveNext a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

treeCursorInsertAndSelect :: Tree a -> TreeCursor a -> Maybe (TreeCursor a)
treeCursorInsertAndSelect :: Tree a -> TreeCursor a -> Maybe (TreeCursor a)
treeCursorInsertAndSelect = (a -> a)
-> (a -> a) -> Tree a -> TreeCursor a -> Maybe (TreeCursor a)
forall a b.
(a -> b)
-> (b -> a) -> Tree b -> TreeCursor a b -> Maybe (TreeCursor a b)
TC.treeCursorInsertAndSelect a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

treeCursorInsertNodeSingleAndSelect :: a -> TreeCursor a -> Maybe (TreeCursor a)
treeCursorInsertNodeSingleAndSelect :: a -> TreeCursor a -> Maybe (TreeCursor a)
treeCursorInsertNodeSingleAndSelect = (a -> a) -> a -> TreeCursor a -> Maybe (TreeCursor a)
forall a b.
(a -> b) -> a -> TreeCursor a b -> Maybe (TreeCursor a b)
TC.treeCursorInsertNodeSingleAndSelect a -> a
forall a. a -> a
id

treeCursorInsertNodeAndSelect :: a -> CForest a -> TreeCursor a -> Maybe (TreeCursor a)
treeCursorInsertNodeAndSelect :: a -> CForest a -> TreeCursor a -> Maybe (TreeCursor a)
treeCursorInsertNodeAndSelect = (a -> a) -> a -> CForest a -> TreeCursor a -> Maybe (TreeCursor a)
forall a b.
(a -> b)
-> a -> CForest b -> TreeCursor a b -> Maybe (TreeCursor a b)
TC.treeCursorInsertNodeAndSelect a -> a
forall a. a -> a
id

treeCursorAppendAndSelect :: Tree a -> TreeCursor a -> Maybe (TreeCursor a)
treeCursorAppendAndSelect :: Tree a -> TreeCursor a -> Maybe (TreeCursor a)
treeCursorAppendAndSelect = (a -> a)
-> (a -> a) -> Tree a -> TreeCursor a -> Maybe (TreeCursor a)
forall a b.
(a -> b)
-> (b -> a) -> Tree b -> TreeCursor a b -> Maybe (TreeCursor a b)
TC.treeCursorAppendAndSelect a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

treeCursorAppendNodeSingleAndSelect :: a -> TreeCursor a -> Maybe (TreeCursor a)
treeCursorAppendNodeSingleAndSelect :: a -> TreeCursor a -> Maybe (TreeCursor a)
treeCursorAppendNodeSingleAndSelect = (a -> a) -> a -> TreeCursor a -> Maybe (TreeCursor a)
forall a b.
(a -> b) -> a -> TreeCursor a b -> Maybe (TreeCursor a b)
TC.treeCursorAppendNodeSingleAndSelect a -> a
forall a. a -> a
id

treeCursorAppendNodeAndSelect :: a -> CForest a -> TreeCursor a -> Maybe (TreeCursor a)
treeCursorAppendNodeAndSelect :: a -> CForest a -> TreeCursor a -> Maybe (TreeCursor a)
treeCursorAppendNodeAndSelect = (a -> a) -> a -> CForest a -> TreeCursor a -> Maybe (TreeCursor a)
forall a b.
(a -> b)
-> a -> CForest b -> TreeCursor a b -> Maybe (TreeCursor a b)
TC.treeCursorAppendNodeAndSelect a -> a
forall a. a -> a
id

treeCursorAddChildAtPosAndSelect :: Int -> Tree a -> TreeCursor a -> TreeCursor a
treeCursorAddChildAtPosAndSelect :: Int -> Tree a -> TreeCursor a -> TreeCursor a
treeCursorAddChildAtPosAndSelect = (a -> a)
-> (a -> a) -> Int -> Tree a -> TreeCursor a -> TreeCursor a
forall a b.
(a -> b)
-> (b -> a) -> Int -> Tree b -> TreeCursor a b -> TreeCursor a b
TC.treeCursorAddChildAtPosAndSelect a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

treeCursorAddChildAtStartAndSelect :: Tree a -> TreeCursor a -> TreeCursor a
treeCursorAddChildAtStartAndSelect :: Tree a -> TreeCursor a -> TreeCursor a
treeCursorAddChildAtStartAndSelect = (a -> a) -> (a -> a) -> Tree a -> TreeCursor a -> TreeCursor a
forall a b.
(a -> b) -> (b -> a) -> Tree b -> TreeCursor a b -> TreeCursor a b
TC.treeCursorAddChildAtStartAndSelect a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

treeCursorAddChildAtEndAndSelect :: Tree a -> TreeCursor a -> TreeCursor a
treeCursorAddChildAtEndAndSelect :: Tree a -> TreeCursor a -> TreeCursor a
treeCursorAddChildAtEndAndSelect = (a -> a) -> (a -> a) -> Tree a -> TreeCursor a -> TreeCursor a
forall a b.
(a -> b) -> (b -> a) -> Tree b -> TreeCursor a b -> TreeCursor a b
TC.treeCursorAddChildAtEndAndSelect a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

treeCursorAddChildNodeSingleAtPosAndSelect :: Int -> a -> TreeCursor a -> TreeCursor a
treeCursorAddChildNodeSingleAtPosAndSelect :: Int -> a -> TreeCursor a -> TreeCursor a
treeCursorAddChildNodeSingleAtPosAndSelect = (a -> a) -> Int -> a -> TreeCursor a -> TreeCursor a
forall a b.
(a -> b) -> Int -> a -> TreeCursor a b -> TreeCursor a b
TC.treeCursorAddChildNodeSingleAtPosAndSelect a -> a
forall a. a -> a
id

treeCursorAddChildNodeSingleAtStartAndSelect :: a -> TreeCursor a -> TreeCursor a
treeCursorAddChildNodeSingleAtStartAndSelect :: a -> TreeCursor a -> TreeCursor a
treeCursorAddChildNodeSingleAtStartAndSelect = (a -> a) -> a -> TreeCursor a -> TreeCursor a
forall a b. (a -> b) -> a -> TreeCursor a b -> TreeCursor a b
TC.treeCursorAddChildNodeSingleAtStartAndSelect a -> a
forall a. a -> a
id

treeCursorAddChildNodeSingleAtEndAndSelect :: a -> TreeCursor a -> TreeCursor a
treeCursorAddChildNodeSingleAtEndAndSelect :: a -> TreeCursor a -> TreeCursor a
treeCursorAddChildNodeSingleAtEndAndSelect = (a -> a) -> a -> TreeCursor a -> TreeCursor a
forall a b. (a -> b) -> a -> TreeCursor a b -> TreeCursor a b
TC.treeCursorAddChildNodeSingleAtEndAndSelect a -> a
forall a. a -> a
id

treeCursorAddChildNodeAtPosAndSelect :: Int -> a -> Forest a -> TreeCursor a -> TreeCursor a
treeCursorAddChildNodeAtPosAndSelect :: Int -> a -> Forest a -> TreeCursor a -> TreeCursor a
treeCursorAddChildNodeAtPosAndSelect = (a -> a) -> Int -> a -> Forest a -> TreeCursor a -> TreeCursor a
forall a b.
(a -> b)
-> Int -> a -> Forest b -> TreeCursor a b -> TreeCursor a b
TC.treeCursorAddChildNodeAtPosAndSelect a -> a
forall a. a -> a
id

treeCursorAddChildNodeAtStartAndSelect :: a -> Forest a -> TreeCursor a -> TreeCursor a
treeCursorAddChildNodeAtStartAndSelect :: a -> Forest a -> TreeCursor a -> TreeCursor a
treeCursorAddChildNodeAtStartAndSelect = (a -> a) -> a -> Forest a -> TreeCursor a -> TreeCursor a
forall a b.
(a -> b) -> a -> Forest b -> TreeCursor a b -> TreeCursor a b
TC.treeCursorAddChildNodeAtStartAndSelect a -> a
forall a. a -> a
id

treeCursorAddChildNodeAtEndAndSelect :: a -> Forest a -> TreeCursor a -> TreeCursor a
treeCursorAddChildNodeAtEndAndSelect :: a -> Forest a -> TreeCursor a -> TreeCursor a
treeCursorAddChildNodeAtEndAndSelect = (a -> a) -> a -> Forest a -> TreeCursor a -> TreeCursor a
forall a b.
(a -> b) -> a -> Forest b -> TreeCursor a b -> TreeCursor a b
TC.treeCursorAddChildNodeAtEndAndSelect a -> a
forall a. a -> a
id

treeCursorDeleteSubTreeAndSelectPrevious :: TreeCursor a -> Maybe (DeleteOrUpdate (TreeCursor a))
treeCursorDeleteSubTreeAndSelectPrevious :: TreeCursor a -> Maybe (DeleteOrUpdate (TreeCursor a))
treeCursorDeleteSubTreeAndSelectPrevious = (a -> a) -> TreeCursor a -> Maybe (DeleteOrUpdate (TreeCursor a))
forall b a.
(b -> a)
-> TreeCursor a b -> Maybe (DeleteOrUpdate (TreeCursor a b))
TC.treeCursorDeleteSubTreeAndSelectPrevious a -> a
forall a. a -> a
id

treeCursorDeleteSubTreeAndSelectNext :: TreeCursor a -> Maybe (DeleteOrUpdate (TreeCursor a))
treeCursorDeleteSubTreeAndSelectNext :: TreeCursor a -> Maybe (DeleteOrUpdate (TreeCursor a))
treeCursorDeleteSubTreeAndSelectNext = (a -> a) -> TreeCursor a -> Maybe (DeleteOrUpdate (TreeCursor a))
forall b a.
(b -> a)
-> TreeCursor a b -> Maybe (DeleteOrUpdate (TreeCursor a b))
TC.treeCursorDeleteSubTreeAndSelectNext a -> a
forall a. a -> a
id

treeCursorDeleteSubTreeAndSelectAbove :: TreeCursor a -> DeleteOrUpdate (TreeCursor a)
treeCursorDeleteSubTreeAndSelectAbove :: TreeCursor a -> DeleteOrUpdate (TreeCursor a)
treeCursorDeleteSubTreeAndSelectAbove = (a -> a) -> TreeCursor a -> DeleteOrUpdate (TreeCursor a)
forall b a.
(b -> a) -> TreeCursor a b -> DeleteOrUpdate (TreeCursor a b)
TC.treeCursorDeleteSubTreeAndSelectAbove a -> a
forall a. a -> a
id

treeCursorRemoveSubTree :: TreeCursor a -> DeleteOrUpdate (TreeCursor a)
treeCursorRemoveSubTree :: TreeCursor a -> DeleteOrUpdate (TreeCursor a)
treeCursorRemoveSubTree = (a -> a) -> TreeCursor a -> DeleteOrUpdate (TreeCursor a)
forall b a.
(b -> a) -> TreeCursor a b -> DeleteOrUpdate (TreeCursor a b)
TC.treeCursorRemoveSubTree a -> a
forall a. a -> a
id

treeCursorDeleteSubTree :: TreeCursor a -> DeleteOrUpdate (TreeCursor a)
treeCursorDeleteSubTree :: TreeCursor a -> DeleteOrUpdate (TreeCursor a)
treeCursorDeleteSubTree = (a -> a) -> TreeCursor a -> DeleteOrUpdate (TreeCursor a)
forall b a.
(b -> a) -> TreeCursor a b -> DeleteOrUpdate (TreeCursor a b)
TC.treeCursorDeleteSubTree a -> a
forall a. a -> a
id

treeCursorDeleteElemAndSelectPrevious :: TreeCursor a -> Maybe (DeleteOrUpdate (TreeCursor a))
treeCursorDeleteElemAndSelectPrevious :: TreeCursor a -> Maybe (DeleteOrUpdate (TreeCursor a))
treeCursorDeleteElemAndSelectPrevious = (a -> a) -> TreeCursor a -> Maybe (DeleteOrUpdate (TreeCursor a))
forall b a.
(b -> a)
-> TreeCursor a b -> Maybe (DeleteOrUpdate (TreeCursor a b))
TC.treeCursorDeleteElemAndSelectPrevious a -> a
forall a. a -> a
id

treeCursorDeleteElemAndSelectNext :: TreeCursor a -> Maybe (DeleteOrUpdate (TreeCursor a))
treeCursorDeleteElemAndSelectNext :: TreeCursor a -> Maybe (DeleteOrUpdate (TreeCursor a))
treeCursorDeleteElemAndSelectNext = (a -> a) -> TreeCursor a -> Maybe (DeleteOrUpdate (TreeCursor a))
forall b a.
(b -> a)
-> TreeCursor a b -> Maybe (DeleteOrUpdate (TreeCursor a b))
TC.treeCursorDeleteElemAndSelectNext a -> a
forall a. a -> a
id

treeCursorDeleteElemAndSelectAbove :: TreeCursor a -> Maybe (DeleteOrUpdate (TreeCursor a))
treeCursorDeleteElemAndSelectAbove :: TreeCursor a -> Maybe (DeleteOrUpdate (TreeCursor a))
treeCursorDeleteElemAndSelectAbove = (a -> a) -> TreeCursor a -> Maybe (DeleteOrUpdate (TreeCursor a))
forall b a.
(b -> a)
-> TreeCursor a b -> Maybe (DeleteOrUpdate (TreeCursor a b))
TC.treeCursorDeleteElemAndSelectAbove a -> a
forall a. a -> a
id

treeCursorRemoveElem :: TreeCursor a -> DeleteOrUpdate (TreeCursor a)
treeCursorRemoveElem :: TreeCursor a -> DeleteOrUpdate (TreeCursor a)
treeCursorRemoveElem = (a -> a) -> TreeCursor a -> DeleteOrUpdate (TreeCursor a)
forall b a.
(b -> a) -> TreeCursor a b -> DeleteOrUpdate (TreeCursor a b)
TC.treeCursorRemoveElem a -> a
forall a. a -> a
id

treeCursorDeleteElem :: TreeCursor a -> DeleteOrUpdate (TreeCursor a)
treeCursorDeleteElem :: TreeCursor a -> DeleteOrUpdate (TreeCursor a)
treeCursorDeleteElem = (a -> a) -> TreeCursor a -> DeleteOrUpdate (TreeCursor a)
forall b a.
(b -> a) -> TreeCursor a b -> DeleteOrUpdate (TreeCursor a b)
TC.treeCursorDeleteElem a -> a
forall a. a -> a
id

treeCursorPromoteElem :: TreeCursor a -> TC.PromoteElemResult (TreeCursor a)
treeCursorPromoteElem :: TreeCursor a -> PromoteElemResult (TreeCursor a)
treeCursorPromoteElem = (a -> a)
-> (a -> a) -> TreeCursor a -> PromoteElemResult (TreeCursor a)
forall a b.
(a -> b)
-> (b -> a) -> TreeCursor a b -> PromoteElemResult (TreeCursor a b)
TC.treeCursorPromoteElem a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

treeCursorPromoteSubTree :: TreeCursor a -> TC.PromoteResult (TreeCursor a)
treeCursorPromoteSubTree :: TreeCursor a -> PromoteResult (TreeCursor a)
treeCursorPromoteSubTree = (a -> a)
-> (a -> a) -> TreeCursor a -> PromoteResult (TreeCursor a)
forall a b.
(a -> b)
-> (b -> a) -> TreeCursor a b -> PromoteResult (TreeCursor a b)
TC.treeCursorPromoteSubTree a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

treeCursorDemoteElem :: TreeCursor a -> TC.DemoteResult (TreeCursor a)
treeCursorDemoteElem :: TreeCursor a -> DemoteResult (TreeCursor a)
treeCursorDemoteElem = (a -> a) -> (a -> a) -> TreeCursor a -> DemoteResult (TreeCursor a)
forall a b.
(a -> b)
-> (b -> a) -> TreeCursor a b -> DemoteResult (TreeCursor a b)
TC.treeCursorDemoteElem a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

treeCursorDemoteSubTree :: TreeCursor a -> TC.DemoteResult (TreeCursor a)
treeCursorDemoteSubTree :: TreeCursor a -> DemoteResult (TreeCursor a)
treeCursorDemoteSubTree = (a -> a) -> (a -> a) -> TreeCursor a -> DemoteResult (TreeCursor a)
forall a b.
(a -> b)
-> (b -> a) -> TreeCursor a b -> DemoteResult (TreeCursor a b)
TC.treeCursorDemoteSubTree a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id