|Maintainer||Neil Sculthorpe <email@example.com>|
This module provides several Path abstractions, used for denoting a path through the tree.
- type Path crumb = [crumb]
- newtype SnocPath crumb = SnocPath [crumb]
- class ExtendPath c crumb | c -> crumb where
- (@@) :: c -> crumb -> c
- snocPathToPath :: SnocPath crumb -> Path crumb
- pathToSnocPath :: Path crumb -> SnocPath crumb
- lastCrumb :: SnocPath crumb -> Maybe crumb
- type LocalPath = SnocPath
- type AbsolutePath = SnocPath
- class ReadPath c crumb | c -> crumb where
- lastCrumbT :: (ReadPath c crumb, Monad m) => Translate c m a crumb
- absPathT :: (ReadPath c crumb, Monad m) => Translate c m a (AbsolutePath crumb)
crumb is a value that denotes which child node to descended into.
That is, a path through a tree is specified by a "trail of breadcrumbs".
For example, if the children are numbered,
Int could be used as the
SnocPath is useful for recording where you have been, as it is cheap to keep adding to the end of the list as you travel further.
Path is useful for recording where you intend to go, as you'll need to access it in order.
Path is just a list.
The intent is that a path represents a route through the tree from an arbitrary node.
SnocPath is a list stored in reverse order.
A class of things that can be extended by crumbs.
c is a context type.
The typical use is to extend an
AbsolutePath stored in the context (during tree traversal).
Note however, that if an
AbsolutePath is not stored in the context, an instance can still be declared with
( as an identity operation.
Absolute and Local Paths
A class for contexts that store the current
AbsolutePath, allowing transformations to depend upon it.
Lifted version of