Copyright | (c) Tom Smeets <tom.tsmeets@gmail.com> |
---|---|
License | BSD3-style (see LICENSE) |
Maintainer | Tom Smeets <tom.tsmeets@gmail.com> |
Stability | unstable |
Portability | unportable |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Zipper over the Data.Tree data structure. This module is based on rosezipper.
Synopsis
- data TreeZipper a = TreeZipper {
- tz_current :: Tree a
- tz_before :: Forest a
- tz_after :: Forest a
- tz_parents :: [(Forest a, a, Forest a)]
- cursor :: TreeZipper a -> a
- fromForest :: Forest a -> TreeZipper a
- toForest :: TreeZipper a -> Forest a
- getSubForest :: TreeZipper a -> Forest a
- rootNode :: TreeZipper a -> TreeZipper a
- parent :: TreeZipper a -> Maybe (TreeZipper a)
- children :: TreeZipper a -> Maybe (TreeZipper a)
- nextChild :: TreeZipper a -> Maybe (TreeZipper a)
- previousChild :: TreeZipper a -> Maybe (TreeZipper a)
- nodeDepth :: TreeZipper a -> Int
- nodeIndex :: TreeZipper a -> Int
- followPath :: Eq b => (a -> b) -> [b] -> TreeZipper a -> Maybe (TreeZipper a)
- findChild :: (a -> Bool) -> TreeZipper a -> Maybe (TreeZipper a)
- isLeaf :: TreeZipper a -> Bool
- isRoot :: TreeZipper a -> Bool
- isLast :: TreeZipper a -> Bool
- isFirst :: TreeZipper a -> Bool
Data structure
data TreeZipper a Source #
A Zipper over the Data.Tree data structure.
Very crappy visualization of the TreeZipper
data structure
(tz_parents) ([*], *, [*]) ([*, *], *, []) ([], * [*, *]) | | | +-------+--------+-------+------+ +-*-+ * | | | | | | | (tz_before) (tz_current) (tz_after) * * | | | | +-*-+ * * * | | * *
TreeZipper | |
|
cursor :: TreeZipper a -> a Source #
Get the highlighted value
Conversion
fromForest :: Forest a -> TreeZipper a Source #
Create a TreeZipper
from a list of Tree
s focused on the first element
getSubForest :: TreeZipper a -> Forest a Source #
Create a Forest
from all the children of the current parent
Navigation
rootNode :: TreeZipper a -> TreeZipper a Source #
Go to the upper most node such that nothing is before nor above the cursor
parent :: TreeZipper a -> Maybe (TreeZipper a) Source #
Move to the parent node
children :: TreeZipper a -> Maybe (TreeZipper a) Source #
Move the cursor one level down to the first node
nextChild :: TreeZipper a -> Maybe (TreeZipper a) Source #
Go to the next child node
previousChild :: TreeZipper a -> Maybe (TreeZipper a) Source #
Go to the previous child node
Utils
nodeDepth :: TreeZipper a -> Int Source #
How many nodes are above this one?
nodeIndex :: TreeZipper a -> Int Source #
How many nodes are before the cursor? (on the current level)
followPath :: Eq b => (a -> b) -> [b] -> TreeZipper a -> Maybe (TreeZipper a) Source #
follow a Path specified by the list of nodes
findChild :: (a -> Bool) -> TreeZipper a -> Maybe (TreeZipper a) Source #
go to the first node next to the cursor that matches
isLeaf :: TreeZipper a -> Bool Source #
Check whenther this is a leaf node
isRoot :: TreeZipper a -> Bool Source #
Check whenther this is a leaf node
isLast :: TreeZipper a -> Bool Source #
Check whenther this the last child
isFirst :: TreeZipper a -> Bool Source #
Check whenther this the first child