{-# LANGUAGE TypeFamilies #-}

module Cursor.Simple.Forest
  ( ForestCursor,
    FC.singletonForestCursor,
    makeForestCursor,
    rebuildForestCursor,
    FC.drawForestCursor,
    mapForestCursor,
    FC.forestCursorListCursorL,
    FC.forestCursorSelectedTreeL,
    forestCursorSelectPrevTreeCursor,
    forestCursorSelectNextTreeCursor,
    forestCursorSelectFirstTreeCursor,
    forestCursorSelectLastTreeCursor,
    forestCursorSelectPrev,
    forestCursorSelectNext,
    forestCursorSelectPrevOnSameLevel,
    forestCursorSelectNextOnSameLevel,
    forestCursorSelectFirst,
    forestCursorSelectLast,
    forestCursorSelectFirstOnSameLevel,
    forestCursorSelectLastOnSameLevel,
    forestCursorSelectAbove,
    forestCursorSelectBelowAtPos,
    forestCursorSelectBelowAtStart,
    forestCursorSelectBelowAtEnd,
    FC.forestCursorOpenCurrentForest,
    FC.forestCursorCloseCurrentForest,
    FC.forestCursorToggleCurrentForest,
    FC.forestCursorOpenCurrentForestRecursively,
    FC.forestCursorToggleCurrentForestRecursively,
    FC.forestCursorSelection,
    forestCursorSelectIndex,
    FC.forestCursorInsertEntireTree,
    forestCursorInsertAndSelectTreeCursor,
    FC.forestCursorAppendEntireTree,
    forestCursorAppendAndSelectTreeCursor,
    FC.forestCursorInsertTree,
    FC.forestCursorAppendTree,
    forestCursorInsertAndSelectTree,
    forestCursorAppendAndSelectTree,
    FC.forestCursorInsert,
    FC.forestCursorAppend,
    forestCursorInsertAndSelect,
    forestCursorAppendAndSelect,
    forestCursorInsertNodeSingleAndSelect,
    forestCursorAppendNodeSingleAndSelect,
    forestCursorInsertNodeAndSelect,
    forestCursorAppendNodeAndSelect,
    FC.forestCursorAddChildTreeToNodeAtPos,
    FC.forestCursorAddChildTreeToNodeAtStart,
    FC.forestCursorAddChildTreeToNodeAtEnd,
    FC.forestCursorAddChildToNodeAtPos,
    FC.forestCursorAddChildToNodeAtStart,
    FC.forestCursorAddChildToNodeAtEnd,
    forestCursorAddChildTreeToNodeAtPosAndSelect,
    forestCursorAddChildTreeToNodeAtStartAndSelect,
    forestCursorAddChildTreeToNodeAtEndAndSelect,
    forestCursorAddChildToNodeAtPosAndSelect,
    forestCursorAddChildToNodeAtStartAndSelect,
    forestCursorAddChildToNodeAtEndAndSelect,
    forestCursorAddChildNodeSingleToNodeAtPosAndSelect,
    forestCursorAddChildNodeSingleToNodeAtStartAndSelect,
    forestCursorAddChildNodeSingleToNodeAtEndAndSelect,
    forestCursorAddChildNodeToNodeAtPosAndSelect,
    forestCursorAddChildNodeToNodeAtStartAndSelect,
    forestCursorAddChildNodeToNodeAtEndAndSelect,
    forestCursorRemoveElemAndSelectPrev,
    forestCursorDeleteElemAndSelectNext,
    forestCursorRemoveElem,
    forestCursorDeleteElem,
    forestCursorRemoveSubTreeAndSelectPrev,
    forestCursorDeleteSubTreeAndSelectNext,
    forestCursorRemoveSubTree,
    forestCursorDeleteSubTree,
    forestCursorAddRoot,
    FC.forestCursorSwapPrev,
    FC.forestCursorSwapNext,
    forestCursorPromoteElem,
    forestCursorPromoteSubTree,
    forestCursorDemoteElem,
    forestCursorDemoteSubTree,
    FC.forestCursorDemoteElemUnder,
    FC.forestCursorDemoteSubTreeUnder,
    FC.CTree (..),
    FC.makeCTree,
    FC.cTree,
    FC.rebuildCTree,
    FC.CForest (..),
    FC.makeCForest,
    FC.cForest,
    FC.rebuildCForest,
  )
where

import qualified Cursor.Forest as FC
import Cursor.Simple.Tree
import Cursor.Types
import Data.List.NonEmpty (NonEmpty)
import Data.Tree
import Data.Validity.Tree ()

type ForestCursor a = FC.ForestCursor a a

makeForestCursor :: NonEmpty (CTree a) -> ForestCursor a
makeForestCursor :: NonEmpty (CTree a) -> ForestCursor a
makeForestCursor = (a -> a) -> NonEmpty (CTree a) -> ForestCursor a
forall b a. (b -> a) -> NonEmpty (CTree b) -> ForestCursor a b
FC.makeForestCursor a -> a
forall a. a -> a
id

rebuildForestCursor :: ForestCursor a -> NonEmpty (CTree a)
rebuildForestCursor :: ForestCursor a -> NonEmpty (CTree a)
rebuildForestCursor = (a -> a) -> ForestCursor a -> NonEmpty (CTree a)
forall a b. (a -> b) -> ForestCursor a b -> NonEmpty (CTree b)
FC.rebuildForestCursor a -> a
forall a. a -> a
id

mapForestCursor :: (a -> b) -> ForestCursor a -> ForestCursor b
mapForestCursor :: (a -> b) -> ForestCursor a -> ForestCursor b
mapForestCursor a -> b
f = (a -> b) -> (a -> b) -> ForestCursor a -> ForestCursor b
forall a c b d.
(a -> c) -> (b -> d) -> ForestCursor a b -> ForestCursor c d
FC.mapForestCursor a -> b
f a -> b
f

forestCursorSelectPrevTreeCursor :: ForestCursor a -> Maybe (ForestCursor a)
forestCursorSelectPrevTreeCursor :: ForestCursor a -> Maybe (ForestCursor a)
forestCursorSelectPrevTreeCursor = (a -> a) -> (a -> a) -> ForestCursor a -> Maybe (ForestCursor a)
forall a b.
(a -> b)
-> (b -> a) -> ForestCursor a b -> Maybe (ForestCursor a b)
FC.forestCursorSelectPrevTreeCursor a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorSelectNextTreeCursor :: ForestCursor a -> Maybe (ForestCursor a)
forestCursorSelectNextTreeCursor :: ForestCursor a -> Maybe (ForestCursor a)
forestCursorSelectNextTreeCursor = (a -> a) -> (a -> a) -> ForestCursor a -> Maybe (ForestCursor a)
forall a b.
(a -> b)
-> (b -> a) -> ForestCursor a b -> Maybe (ForestCursor a b)
FC.forestCursorSelectNextTreeCursor a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorSelectFirstTreeCursor :: ForestCursor a -> ForestCursor a
forestCursorSelectFirstTreeCursor :: ForestCursor a -> ForestCursor a
forestCursorSelectFirstTreeCursor = (a -> a) -> (a -> a) -> ForestCursor a -> ForestCursor a
forall a b.
(a -> b) -> (b -> a) -> ForestCursor a b -> ForestCursor a b
FC.forestCursorSelectFirstTreeCursor a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorSelectLastTreeCursor :: ForestCursor a -> ForestCursor a
forestCursorSelectLastTreeCursor :: ForestCursor a -> ForestCursor a
forestCursorSelectLastTreeCursor = (a -> a) -> (a -> a) -> ForestCursor a -> ForestCursor a
forall a b.
(a -> b) -> (b -> a) -> ForestCursor a b -> ForestCursor a b
FC.forestCursorSelectLastTreeCursor a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorSelectNext :: ForestCursor a -> Maybe (ForestCursor a)
forestCursorSelectNext :: ForestCursor a -> Maybe (ForestCursor a)
forestCursorSelectNext = (a -> a) -> (a -> a) -> ForestCursor a -> Maybe (ForestCursor a)
forall a b.
(a -> b)
-> (b -> a) -> ForestCursor a b -> Maybe (ForestCursor a b)
FC.forestCursorSelectNext a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorSelectPrev :: ForestCursor a -> Maybe (ForestCursor a)
forestCursorSelectPrev :: ForestCursor a -> Maybe (ForestCursor a)
forestCursorSelectPrev = (a -> a) -> (a -> a) -> ForestCursor a -> Maybe (ForestCursor a)
forall a b.
(a -> b)
-> (b -> a) -> ForestCursor a b -> Maybe (ForestCursor a b)
FC.forestCursorSelectPrev a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorSelectNextOnSameLevel :: ForestCursor a -> Maybe (ForestCursor a)
forestCursorSelectNextOnSameLevel :: ForestCursor a -> Maybe (ForestCursor a)
forestCursorSelectNextOnSameLevel = (a -> a) -> (a -> a) -> ForestCursor a -> Maybe (ForestCursor a)
forall a b.
(a -> b)
-> (b -> a) -> ForestCursor a b -> Maybe (ForestCursor a b)
FC.forestCursorSelectNextOnSameLevel a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorSelectPrevOnSameLevel :: ForestCursor a -> Maybe (ForestCursor a)
forestCursorSelectPrevOnSameLevel :: ForestCursor a -> Maybe (ForestCursor a)
forestCursorSelectPrevOnSameLevel = (a -> a) -> (a -> a) -> ForestCursor a -> Maybe (ForestCursor a)
forall a b.
(a -> b)
-> (b -> a) -> ForestCursor a b -> Maybe (ForestCursor a b)
FC.forestCursorSelectPrevOnSameLevel a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorSelectFirst :: ForestCursor a -> ForestCursor a
forestCursorSelectFirst :: ForestCursor a -> ForestCursor a
forestCursorSelectFirst = (a -> a) -> (a -> a) -> ForestCursor a -> ForestCursor a
forall a b.
(a -> b) -> (b -> a) -> ForestCursor a b -> ForestCursor a b
FC.forestCursorSelectFirst a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorSelectLast :: ForestCursor a -> ForestCursor a
forestCursorSelectLast :: ForestCursor a -> ForestCursor a
forestCursorSelectLast = (a -> a) -> (a -> a) -> ForestCursor a -> ForestCursor a
forall a b.
(a -> b) -> (b -> a) -> ForestCursor a b -> ForestCursor a b
FC.forestCursorSelectLast a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorSelectFirstOnSameLevel :: ForestCursor a -> ForestCursor a
forestCursorSelectFirstOnSameLevel :: ForestCursor a -> ForestCursor a
forestCursorSelectFirstOnSameLevel = (a -> a) -> (a -> a) -> ForestCursor a -> ForestCursor a
forall a b.
(a -> b) -> (b -> a) -> ForestCursor a b -> ForestCursor a b
FC.forestCursorSelectFirstOnSameLevel a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorSelectLastOnSameLevel :: ForestCursor a -> ForestCursor a
forestCursorSelectLastOnSameLevel :: ForestCursor a -> ForestCursor a
forestCursorSelectLastOnSameLevel = (a -> a) -> (a -> a) -> ForestCursor a -> ForestCursor a
forall a b.
(a -> b) -> (b -> a) -> ForestCursor a b -> ForestCursor a b
FC.forestCursorSelectLastOnSameLevel a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorSelectAbove :: ForestCursor a -> Maybe (ForestCursor a)
forestCursorSelectAbove :: ForestCursor a -> Maybe (ForestCursor a)
forestCursorSelectAbove = (a -> a) -> (a -> a) -> ForestCursor a -> Maybe (ForestCursor a)
forall a b.
(a -> b)
-> (b -> a) -> ForestCursor a b -> Maybe (ForestCursor a b)
FC.forestCursorSelectAbove a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorSelectBelowAtPos :: Int -> ForestCursor a -> Maybe (ForestCursor a)
forestCursorSelectBelowAtPos :: Int -> ForestCursor a -> Maybe (ForestCursor a)
forestCursorSelectBelowAtPos = (a -> a)
-> (a -> a) -> Int -> ForestCursor a -> Maybe (ForestCursor a)
forall a b.
(a -> b)
-> (b -> a) -> Int -> ForestCursor a b -> Maybe (ForestCursor a b)
FC.forestCursorSelectBelowAtPos a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorSelectBelowAtStart :: ForestCursor a -> Maybe (ForestCursor a)
forestCursorSelectBelowAtStart :: ForestCursor a -> Maybe (ForestCursor a)
forestCursorSelectBelowAtStart = (a -> a) -> (a -> a) -> ForestCursor a -> Maybe (ForestCursor a)
forall a b.
(a -> b)
-> (b -> a) -> ForestCursor a b -> Maybe (ForestCursor a b)
FC.forestCursorSelectBelowAtStart a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorSelectBelowAtEnd :: ForestCursor a -> Maybe (ForestCursor a)
forestCursorSelectBelowAtEnd :: ForestCursor a -> Maybe (ForestCursor a)
forestCursorSelectBelowAtEnd = (a -> a) -> (a -> a) -> ForestCursor a -> Maybe (ForestCursor a)
forall a b.
(a -> b)
-> (b -> a) -> ForestCursor a b -> Maybe (ForestCursor a b)
FC.forestCursorSelectBelowAtEnd a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorSelectIndex :: Int -> ForestCursor a -> Maybe (ForestCursor a)
forestCursorSelectIndex :: Int -> ForestCursor a -> Maybe (ForestCursor a)
forestCursorSelectIndex = (a -> a)
-> (a -> a) -> Int -> ForestCursor a -> Maybe (ForestCursor a)
forall a b.
(a -> b)
-> (b -> a) -> Int -> ForestCursor a b -> Maybe (ForestCursor a b)
FC.forestCursorSelectIndex a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorInsertAndSelectTreeCursor :: TreeCursor a -> ForestCursor a -> ForestCursor a
forestCursorInsertAndSelectTreeCursor :: TreeCursor a -> ForestCursor a -> ForestCursor a
forestCursorInsertAndSelectTreeCursor = (a -> a) -> TreeCursor a -> ForestCursor a -> ForestCursor a
forall a b.
(a -> b) -> TreeCursor a b -> ForestCursor a b -> ForestCursor a b
FC.forestCursorInsertAndSelectTreeCursor a -> a
forall a. a -> a
id

forestCursorAppendAndSelectTreeCursor :: TreeCursor a -> ForestCursor a -> ForestCursor a
forestCursorAppendAndSelectTreeCursor :: TreeCursor a -> ForestCursor a -> ForestCursor a
forestCursorAppendAndSelectTreeCursor = (a -> a) -> TreeCursor a -> ForestCursor a -> ForestCursor a
forall a b.
(a -> b) -> TreeCursor a b -> ForestCursor a b -> ForestCursor a b
FC.forestCursorAppendAndSelectTreeCursor a -> a
forall a. a -> a
id

forestCursorInsertAndSelectTree :: Tree a -> ForestCursor a -> ForestCursor a
forestCursorInsertAndSelectTree :: Tree a -> ForestCursor a -> ForestCursor a
forestCursorInsertAndSelectTree = (a -> a) -> (a -> a) -> Tree a -> ForestCursor a -> ForestCursor a
forall a b.
(a -> b)
-> (b -> a) -> Tree b -> ForestCursor a b -> ForestCursor a b
FC.forestCursorInsertAndSelectTree a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorAppendAndSelectTree :: Tree a -> ForestCursor a -> ForestCursor a
forestCursorAppendAndSelectTree :: Tree a -> ForestCursor a -> ForestCursor a
forestCursorAppendAndSelectTree = (a -> a) -> (a -> a) -> Tree a -> ForestCursor a -> ForestCursor a
forall a b.
(a -> b)
-> (b -> a) -> Tree b -> ForestCursor a b -> ForestCursor a b
FC.forestCursorAppendAndSelectTree a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorInsertAndSelect :: a -> ForestCursor a -> ForestCursor a
forestCursorInsertAndSelect :: a -> ForestCursor a -> ForestCursor a
forestCursorInsertAndSelect = (a -> a) -> (a -> a) -> a -> ForestCursor a -> ForestCursor a
forall a b.
(a -> b) -> (b -> a) -> b -> ForestCursor a b -> ForestCursor a b
FC.forestCursorInsertAndSelect a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorInsertNodeSingleAndSelect :: a -> ForestCursor a -> ForestCursor a
forestCursorInsertNodeSingleAndSelect :: a -> ForestCursor a -> ForestCursor a
forestCursorInsertNodeSingleAndSelect = (a -> a) -> a -> ForestCursor a -> ForestCursor a
forall a b. (a -> b) -> a -> ForestCursor a b -> ForestCursor a b
FC.forestCursorInsertNodeSingleAndSelect a -> a
forall a. a -> a
id

forestCursorInsertNodeAndSelect :: a -> CForest a -> ForestCursor a -> ForestCursor a
forestCursorInsertNodeAndSelect :: a -> CForest a -> ForestCursor a -> ForestCursor a
forestCursorInsertNodeAndSelect = (a -> a) -> a -> CForest a -> ForestCursor a -> ForestCursor a
forall a b.
(a -> b) -> a -> CForest b -> ForestCursor a b -> ForestCursor a b
FC.forestCursorInsertNodeAndSelect a -> a
forall a. a -> a
id

forestCursorAppendAndSelect :: a -> ForestCursor a -> ForestCursor a
forestCursorAppendAndSelect :: a -> ForestCursor a -> ForestCursor a
forestCursorAppendAndSelect = (a -> a) -> (a -> a) -> a -> ForestCursor a -> ForestCursor a
forall a b.
(a -> b) -> (b -> a) -> b -> ForestCursor a b -> ForestCursor a b
FC.forestCursorAppendAndSelect a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorAppendNodeSingleAndSelect :: a -> ForestCursor a -> ForestCursor a
forestCursorAppendNodeSingleAndSelect :: a -> ForestCursor a -> ForestCursor a
forestCursorAppendNodeSingleAndSelect = (a -> a) -> a -> ForestCursor a -> ForestCursor a
forall a b. (a -> b) -> a -> ForestCursor a b -> ForestCursor a b
FC.forestCursorAppendNodeSingleAndSelect a -> a
forall a. a -> a
id

forestCursorAppendNodeAndSelect :: a -> CForest a -> ForestCursor a -> ForestCursor a
forestCursorAppendNodeAndSelect :: a -> CForest a -> ForestCursor a -> ForestCursor a
forestCursorAppendNodeAndSelect = (a -> a) -> a -> CForest a -> ForestCursor a -> ForestCursor a
forall a b.
(a -> b) -> a -> CForest b -> ForestCursor a b -> ForestCursor a b
FC.forestCursorAppendNodeAndSelect a -> a
forall a. a -> a
id

forestCursorAddChildTreeToNodeAtPosAndSelect :: Int -> Tree a -> ForestCursor a -> ForestCursor a
forestCursorAddChildTreeToNodeAtPosAndSelect :: Int -> Tree a -> ForestCursor a -> ForestCursor a
forestCursorAddChildTreeToNodeAtPosAndSelect = (a -> a)
-> (a -> a) -> Int -> Tree a -> ForestCursor a -> ForestCursor a
forall a b.
(a -> b)
-> (b -> a)
-> Int
-> Tree b
-> ForestCursor a b
-> ForestCursor a b
FC.forestCursorAddChildTreeToNodeAtPosAndSelect a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorAddChildTreeToNodeAtStartAndSelect :: Tree a -> ForestCursor a -> ForestCursor a
forestCursorAddChildTreeToNodeAtStartAndSelect :: Tree a -> ForestCursor a -> ForestCursor a
forestCursorAddChildTreeToNodeAtStartAndSelect =
  (a -> a) -> (a -> a) -> Tree a -> ForestCursor a -> ForestCursor a
forall a b.
(a -> b)
-> (b -> a) -> Tree b -> ForestCursor a b -> ForestCursor a b
FC.forestCursorAddChildTreeToNodeAtStartAndSelect a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorAddChildTreeToNodeAtEndAndSelect :: Tree a -> ForestCursor a -> ForestCursor a
forestCursorAddChildTreeToNodeAtEndAndSelect :: Tree a -> ForestCursor a -> ForestCursor a
forestCursorAddChildTreeToNodeAtEndAndSelect = (a -> a) -> (a -> a) -> Tree a -> ForestCursor a -> ForestCursor a
forall a b.
(a -> b)
-> (b -> a) -> Tree b -> ForestCursor a b -> ForestCursor a b
FC.forestCursorAddChildTreeToNodeAtEndAndSelect a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorAddChildToNodeAtPosAndSelect :: Int -> a -> ForestCursor a -> ForestCursor a
forestCursorAddChildToNodeAtPosAndSelect :: Int -> a -> ForestCursor a -> ForestCursor a
forestCursorAddChildToNodeAtPosAndSelect = (a -> a)
-> (a -> a) -> Int -> a -> ForestCursor a -> ForestCursor a
forall a b.
(a -> b)
-> (b -> a) -> Int -> b -> ForestCursor a b -> ForestCursor a b
FC.forestCursorAddChildToNodeAtPosAndSelect a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorAddChildToNodeAtStartAndSelect :: a -> ForestCursor a -> ForestCursor a
forestCursorAddChildToNodeAtStartAndSelect :: a -> ForestCursor a -> ForestCursor a
forestCursorAddChildToNodeAtStartAndSelect = (a -> a) -> (a -> a) -> a -> ForestCursor a -> ForestCursor a
forall a b.
(a -> b) -> (b -> a) -> b -> ForestCursor a b -> ForestCursor a b
FC.forestCursorAddChildToNodeAtStartAndSelect a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorAddChildToNodeAtEndAndSelect :: a -> ForestCursor a -> ForestCursor a
forestCursorAddChildToNodeAtEndAndSelect :: a -> ForestCursor a -> ForestCursor a
forestCursorAddChildToNodeAtEndAndSelect = (a -> a) -> (a -> a) -> a -> ForestCursor a -> ForestCursor a
forall a b.
(a -> b) -> (b -> a) -> b -> ForestCursor a b -> ForestCursor a b
FC.forestCursorAddChildToNodeAtEndAndSelect a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorAddChildNodeSingleToNodeAtPosAndSelect :: Int -> a -> ForestCursor a -> ForestCursor a
forestCursorAddChildNodeSingleToNodeAtPosAndSelect :: Int -> a -> ForestCursor a -> ForestCursor a
forestCursorAddChildNodeSingleToNodeAtPosAndSelect = (a -> a) -> Int -> a -> ForestCursor a -> ForestCursor a
forall a b.
(a -> b) -> Int -> a -> ForestCursor a b -> ForestCursor a b
FC.forestCursorAddChildNodeSingleToNodeAtPosAndSelect a -> a
forall a. a -> a
id

forestCursorAddChildNodeSingleToNodeAtStartAndSelect :: a -> ForestCursor a -> ForestCursor a
forestCursorAddChildNodeSingleToNodeAtStartAndSelect :: a -> ForestCursor a -> ForestCursor a
forestCursorAddChildNodeSingleToNodeAtStartAndSelect = (a -> a) -> a -> ForestCursor a -> ForestCursor a
forall a b. (a -> b) -> a -> ForestCursor a b -> ForestCursor a b
FC.forestCursorAddChildNodeSingleToNodeAtStartAndSelect a -> a
forall a. a -> a
id

forestCursorAddChildNodeSingleToNodeAtEndAndSelect :: a -> ForestCursor a -> ForestCursor a
forestCursorAddChildNodeSingleToNodeAtEndAndSelect :: a -> ForestCursor a -> ForestCursor a
forestCursorAddChildNodeSingleToNodeAtEndAndSelect = (a -> a) -> a -> ForestCursor a -> ForestCursor a
forall a b. (a -> b) -> a -> ForestCursor a b -> ForestCursor a b
FC.forestCursorAddChildNodeSingleToNodeAtEndAndSelect a -> a
forall a. a -> a
id

forestCursorAddChildNodeToNodeAtPosAndSelect :: Int -> a -> Forest a -> ForestCursor a -> ForestCursor a
forestCursorAddChildNodeToNodeAtPosAndSelect :: Int -> a -> Forest a -> ForestCursor a -> ForestCursor a
forestCursorAddChildNodeToNodeAtPosAndSelect = (a -> a)
-> Int -> a -> Forest a -> ForestCursor a -> ForestCursor a
forall a b.
(a -> b)
-> Int -> a -> Forest b -> ForestCursor a b -> ForestCursor a b
FC.forestCursorAddChildNodeToNodeAtPosAndSelect a -> a
forall a. a -> a
id

forestCursorAddChildNodeToNodeAtStartAndSelect :: a -> Forest a -> ForestCursor a -> ForestCursor a
forestCursorAddChildNodeToNodeAtStartAndSelect :: a -> Forest a -> ForestCursor a -> ForestCursor a
forestCursorAddChildNodeToNodeAtStartAndSelect = (a -> a) -> a -> Forest a -> ForestCursor a -> ForestCursor a
forall a b.
(a -> b) -> a -> Forest b -> ForestCursor a b -> ForestCursor a b
FC.forestCursorAddChildNodeToNodeAtStartAndSelect a -> a
forall a. a -> a
id

forestCursorAddChildNodeToNodeAtEndAndSelect :: a -> Forest a -> ForestCursor a -> ForestCursor a
forestCursorAddChildNodeToNodeAtEndAndSelect :: a -> Forest a -> ForestCursor a -> ForestCursor a
forestCursorAddChildNodeToNodeAtEndAndSelect = (a -> a) -> a -> Forest a -> ForestCursor a -> ForestCursor a
forall a b.
(a -> b) -> a -> Forest b -> ForestCursor a b -> ForestCursor a b
FC.forestCursorAddChildNodeToNodeAtEndAndSelect a -> a
forall a. a -> a
id

forestCursorRemoveElemAndSelectPrev :: ForestCursor a -> Maybe (DeleteOrUpdate (ForestCursor a))
forestCursorRemoveElemAndSelectPrev :: ForestCursor a -> Maybe (DeleteOrUpdate (ForestCursor a))
forestCursorRemoveElemAndSelectPrev = (a -> a)
-> ForestCursor a -> Maybe (DeleteOrUpdate (ForestCursor a))
forall b a.
(b -> a)
-> ForestCursor a b -> Maybe (DeleteOrUpdate (ForestCursor a b))
FC.forestCursorRemoveElemAndSelectPrev a -> a
forall a. a -> a
id

forestCursorDeleteElemAndSelectNext :: ForestCursor a -> Maybe (DeleteOrUpdate (ForestCursor a))
forestCursorDeleteElemAndSelectNext :: ForestCursor a -> Maybe (DeleteOrUpdate (ForestCursor a))
forestCursorDeleteElemAndSelectNext = (a -> a)
-> ForestCursor a -> Maybe (DeleteOrUpdate (ForestCursor a))
forall b a.
(b -> a)
-> ForestCursor a b -> Maybe (DeleteOrUpdate (ForestCursor a b))
FC.forestCursorDeleteElemAndSelectNext a -> a
forall a. a -> a
id

forestCursorRemoveElem :: ForestCursor a -> DeleteOrUpdate (ForestCursor a)
forestCursorRemoveElem :: ForestCursor a -> DeleteOrUpdate (ForestCursor a)
forestCursorRemoveElem = (a -> a) -> ForestCursor a -> DeleteOrUpdate (ForestCursor a)
forall b a.
(b -> a) -> ForestCursor a b -> DeleteOrUpdate (ForestCursor a b)
FC.forestCursorRemoveElem a -> a
forall a. a -> a
id

forestCursorDeleteElem :: ForestCursor a -> DeleteOrUpdate (ForestCursor a)
forestCursorDeleteElem :: ForestCursor a -> DeleteOrUpdate (ForestCursor a)
forestCursorDeleteElem = (a -> a) -> ForestCursor a -> DeleteOrUpdate (ForestCursor a)
forall b a.
(b -> a) -> ForestCursor a b -> DeleteOrUpdate (ForestCursor a b)
FC.forestCursorDeleteElem a -> a
forall a. a -> a
id

forestCursorRemoveSubTreeAndSelectPrev :: ForestCursor a -> Maybe (DeleteOrUpdate (ForestCursor a))
forestCursorRemoveSubTreeAndSelectPrev :: ForestCursor a -> Maybe (DeleteOrUpdate (ForestCursor a))
forestCursorRemoveSubTreeAndSelectPrev = (a -> a)
-> ForestCursor a -> Maybe (DeleteOrUpdate (ForestCursor a))
forall b a.
(b -> a)
-> ForestCursor a b -> Maybe (DeleteOrUpdate (ForestCursor a b))
FC.forestCursorRemoveSubTreeAndSelectPrev a -> a
forall a. a -> a
id

forestCursorDeleteSubTreeAndSelectNext :: ForestCursor a -> Maybe (DeleteOrUpdate (ForestCursor a))
forestCursorDeleteSubTreeAndSelectNext :: ForestCursor a -> Maybe (DeleteOrUpdate (ForestCursor a))
forestCursorDeleteSubTreeAndSelectNext = (a -> a)
-> ForestCursor a -> Maybe (DeleteOrUpdate (ForestCursor a))
forall b a.
(b -> a)
-> ForestCursor a b -> Maybe (DeleteOrUpdate (ForestCursor a b))
FC.forestCursorDeleteSubTreeAndSelectNext a -> a
forall a. a -> a
id

forestCursorRemoveSubTree :: ForestCursor a -> DeleteOrUpdate (ForestCursor a)
forestCursorRemoveSubTree :: ForestCursor a -> DeleteOrUpdate (ForestCursor a)
forestCursorRemoveSubTree = (a -> a) -> ForestCursor a -> DeleteOrUpdate (ForestCursor a)
forall b a.
(b -> a) -> ForestCursor a b -> DeleteOrUpdate (ForestCursor a b)
FC.forestCursorRemoveSubTree a -> a
forall a. a -> a
id

forestCursorDeleteSubTree :: ForestCursor a -> DeleteOrUpdate (ForestCursor a)
forestCursorDeleteSubTree :: ForestCursor a -> DeleteOrUpdate (ForestCursor a)
forestCursorDeleteSubTree = (a -> a) -> ForestCursor a -> DeleteOrUpdate (ForestCursor a)
forall b a.
(b -> a) -> ForestCursor a b -> DeleteOrUpdate (ForestCursor a b)
FC.forestCursorDeleteSubTree a -> a
forall a. a -> a
id

forestCursorAddRoot :: ForestCursor a -> a -> TreeCursor a
forestCursorAddRoot :: ForestCursor a -> a -> TreeCursor a
forestCursorAddRoot = (a -> a) -> (a -> a) -> ForestCursor a -> a -> TreeCursor a
forall a b.
(a -> b) -> (b -> a) -> ForestCursor a b -> a -> TreeCursor a b
FC.forestCursorAddRoot a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorPromoteElem :: ForestCursor a -> Maybe (ForestCursor a)
forestCursorPromoteElem :: ForestCursor a -> Maybe (ForestCursor a)
forestCursorPromoteElem = (a -> a) -> (a -> a) -> ForestCursor a -> Maybe (ForestCursor a)
forall a b.
(a -> b)
-> (b -> a) -> ForestCursor a b -> Maybe (ForestCursor a b)
FC.forestCursorPromoteElem a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorPromoteSubTree :: ForestCursor a -> Maybe (ForestCursor a)
forestCursorPromoteSubTree :: ForestCursor a -> Maybe (ForestCursor a)
forestCursorPromoteSubTree = (a -> a) -> (a -> a) -> ForestCursor a -> Maybe (ForestCursor a)
forall a b.
(a -> b)
-> (b -> a) -> ForestCursor a b -> Maybe (ForestCursor a b)
FC.forestCursorPromoteSubTree a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorDemoteElem :: ForestCursor a -> Maybe (ForestCursor a)
forestCursorDemoteElem :: ForestCursor a -> Maybe (ForestCursor a)
forestCursorDemoteElem = (a -> a) -> (a -> a) -> ForestCursor a -> Maybe (ForestCursor a)
forall a b.
(a -> b)
-> (b -> a) -> ForestCursor a b -> Maybe (ForestCursor a b)
FC.forestCursorDemoteElem a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id

forestCursorDemoteSubTree :: ForestCursor a -> Maybe (ForestCursor a)
forestCursorDemoteSubTree :: ForestCursor a -> Maybe (ForestCursor a)
forestCursorDemoteSubTree = (a -> a) -> (a -> a) -> ForestCursor a -> Maybe (ForestCursor a)
forall a b.
(a -> b)
-> (b -> a) -> ForestCursor a b -> Maybe (ForestCursor a b)
FC.forestCursorDemoteSubTree a -> a
forall a. a -> a
id a -> a
forall a. a -> a
id