cursor-0.3.0.0: src/Cursor/Tree/Collapse.hs
module Cursor.Tree.Collapse
( treeCursorOpenCurrentForest
, treeCursorCloseCurrentForest
, treeCursorToggleCurrentForest
, treeCursorOpenCurrentForestRecursively
, treeCursorToggleCurrentForestRecursively
) where
import qualified Data.List.NonEmpty as NE
import Cursor.Tree.Types
treeCursorOpenCurrentForest :: TreeCursor a b -> Maybe (TreeCursor a b)
treeCursorOpenCurrentForest tc =
case treeBelow tc of
EmptyCForest -> Nothing
ClosedForest ts -> Just $ tc {treeBelow = OpenForest $ NE.map makeCTree ts}
OpenForest _ -> Nothing
treeCursorCloseCurrentForest :: TreeCursor a b -> Maybe (TreeCursor a b)
treeCursorCloseCurrentForest tc =
case treeBelow tc of
EmptyCForest -> Nothing
ClosedForest _ -> Nothing
OpenForest ts -> Just $ tc {treeBelow = ClosedForest $ NE.map rebuildCTree ts}
treeCursorToggleCurrentForest :: TreeCursor a b -> Maybe (TreeCursor a b)
treeCursorToggleCurrentForest tc =
case treeBelow tc of
EmptyCForest -> Nothing
ClosedForest ts -> Just $ tc {treeBelow = OpenForest $ NE.map makeCTree ts}
OpenForest ts -> Just $ tc {treeBelow = ClosedForest $ NE.map rebuildCTree ts}
treeCursorOpenCurrentForestRecursively :: TreeCursor a b -> Maybe (TreeCursor a b)
treeCursorOpenCurrentForestRecursively tc =
case treeBelow tc of
EmptyCForest -> Nothing
ClosedForest ts -> Just $ tc {treeBelow = OpenForest $ NE.map (cTree True) ts}
OpenForest _ -> Nothing
treeCursorToggleCurrentForestRecursively :: TreeCursor a b -> Maybe (TreeCursor a b)
treeCursorToggleCurrentForestRecursively tc =
case treeBelow tc of
EmptyCForest -> Nothing
ClosedForest ts -> Just $ tc {treeBelow = OpenForest $ NE.map (cTree True) ts}
OpenForest ts -> Just $ tc {treeBelow = ClosedForest $ NE.map rebuildCTree ts}