Copyright | (c) 2012--2021 The University of Kansas |
---|---|
License | BSD3 |
Maintainer | Neil Sculthorpe <neil.sculthorpe@ntu.ac.uk> |
Stability | beta |
Portability | ghc |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
This module provides several Path abstractions, used for denoting a path through the tree.
Synopsis
- 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
- singletonSnocPath :: crumb -> SnocPath crumb
- lastCrumb :: SnocPath crumb -> Maybe crumb
- type LocalPath = SnocPath
- type AbsolutePath = SnocPath
- class ReadPath c crumb | c -> crumb where
- absPath :: c -> AbsolutePath crumb
- lastCrumbT :: (ReadPath c crumb, MonadFail m) => Transform c m a crumb
- absPathT :: (ReadPath c crumb, Monad m) => Transform c m a (AbsolutePath crumb)
Paths
A 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 crumb
type.
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.
Relative Paths
type Path crumb = [crumb] Source #
A Path
is just a list.
The intent is that a path represents a route through the tree from an arbitrary node.
Snoc Paths
newtype SnocPath crumb Source #
A SnocPath
is a list stored in reverse order.
SnocPath [crumb] |
Instances
Functor SnocPath Source # | |
Eq crumb => Eq (SnocPath crumb) Source # | |
Show crumb => Show (SnocPath crumb) Source # | |
Semigroup (SnocPath crumb) Source # | |
Monoid (SnocPath crumb) Source # | |
ReadPath (AbsolutePath crumb) crumb Source # | The simplest instance of |
Defined in Language.KURE.Path absPath :: AbsolutePath crumb -> AbsolutePath crumb Source # | |
ExtendPath (SnocPath crumb) crumb Source # | Any |
class ExtendPath c crumb | c -> crumb where Source #
A class of things that can be extended by crumbs.
Typically, 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 ('
' crumb)
as an identity operation.
(@@) :: c -> crumb -> c Source #
Extend the current AbsolutePath
by one crumb.
Instances
ExtendPath (SnocPath crumb) crumb Source # | Any |
(ExtendPath c crumb, ExtendPath e crumb) => ExtendPath (ExtendContext c e) crumb Source # | Both components of the context are updated with the crumb. |
Defined in Language.KURE.ExtendableContext (@@) :: ExtendContext c e -> crumb -> ExtendContext c e Source # |
singletonSnocPath :: crumb -> SnocPath crumb Source #
Absolute and Local Paths
type AbsolutePath = SnocPath Source #
A SnocPath
from the root.
class ReadPath c crumb | c -> crumb where Source #
A class for contexts that store the current AbsolutePath
, allowing transformations to depend upon it.
absPath :: c -> AbsolutePath crumb Source #
Read the current absolute path.
Instances
ReadPath (AbsolutePath crumb) crumb Source # | The simplest instance of |
Defined in Language.KURE.Path absPath :: AbsolutePath crumb -> AbsolutePath crumb Source # |