GroteTrap-0.2: GroteTrap




A class for tree types and representations of selections on tree types, as well as functions for converting between text and tree selections.


Paths and navigation

type Path = [Int]Source

A path in a tree. Each integer denotes the selection of a child; these indices are 0-relative.

root :: PathSource

root is the empty path.

type Nav = Path -> PathSource

Navigation transforms one path to another.

up :: NavSource

Move up to parent node. Moving up from root has no effect.

into :: Int -> NavSource

Move down into the nth child node.

down :: NavSource

Move down into first child node.

left :: NavSource

Move left one sibling.

right :: NavSource

Move right one sibling.

sibling :: Int -> NavSource

Move n siblings (n can be negative).

Tree types

class Tree p whereSource

Tree types.


children :: p -> [p]Source

Yields this tree's subtrees.


followM :: (Monad m, Tree t) => t -> Path -> m tSource

Follows a path in a tree, returning the result in a monad.

follow :: Tree t => t -> Path -> tSource

Follows a path in a tree.

depth :: Tree t => t -> IntSource

Yields the depth of the tree.

selectDepth :: Tree t => Int -> t -> [t]Source

Yields all ancestors at the specified depth.

flatten :: Tree t => t -> [t]Source

Breadth-first, pre-order traversal.

Tree selections

class Tree t => Selectable t whereSource

Selectable trees.


allowSubranges :: t -> BoolSource

Tells whether complete subranges of children may be selected in this tree. If not, valid TreeSelections in this tree always have a second element 0.

type TreeSelection = (Path, Int)Source

Selection in a tree. The path indicates the left side of the selection; the int tells how many siblings to the right are included in the selection.

select :: (Monad m, Tree t) => t -> TreeSelection -> m [t]Source

Selects part of a tree.

allSelections :: Selectable a => a -> [TreeSelection]Source

Enumerates all possible selections of a tree.

selectionToRange :: (Tree a, KnowsPosition a) => a -> TreeSelection -> RangeSource

Computes the range of a valid selection.

rangeToSelection :: (Tree a, KnowsPosition a, Monad m) => a -> Range -> m TreeSelectionSource

Converts a specified range to a corresponding selection and returns it in a monad.

posToPath :: (Tree a, KnowsPosition a) => a -> Pos -> PathSource

Returns the path to the deepest descendant whose range contains the specified position.

isValidRange :: (KnowsPosition a, Selectable a) => a -> Range -> BoolSource

Tells whether the text selection corresponds to a tree selection.

Suggesting and fixing

suggest :: (Selectable a, KnowsPosition a) => a -> Range -> [TreeSelection]Source

Yields all possible selections, ordered by distance to the specified range, closest first.

repair :: (KnowsPosition a, Selectable a) => a -> Range -> RangeSource

Takes suggest's first suggestion and yields its range.