kure-2.12.0: Combinators for Strategic Programming

Portabilityghc
Stabilitybeta
MaintainerNeil Sculthorpe <neil@ittc.ku.edu>
Safe HaskellSafe-Inferred

Language.KURE.Path

Contents

Description

This module provides several Path abstractions, used for denoting a path through the tree.

Synopsis

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.

Constructors

SnocPath [crumb] 

Instances

Eq crumb => Eq (SnocPath crumb) 
Show crumb => Show (SnocPath crumb) 
Monoid (SnocPath crumb) 
ReadPath (AbsolutePath crumb) crumb

The simplest instance of ReadPath is AbsolutePath itself.

ExtendPath (SnocPath crumb) crumb

Any SnocPath can be extended.

class ExtendPath c crumb | c -> crumb whereSource

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.

Methods

(@@) :: c -> crumb -> cSource

Extend the current AbsolutePath by one crumb.

Instances

ExtendPath (SnocPath crumb) crumb

Any SnocPath can be extended.

(ExtendPath c crumb, ExtendPath e crumb) => ExtendPath (ExtendContext c e) crumb

Both components of the context are updated with the crumb.

snocPathToPath :: SnocPath crumb -> Path crumbSource

Convert a SnocPath to a Path. O(n).

pathToSnocPath :: Path crumb -> SnocPath crumbSource

Convert a Path to a SnocPath. O(n).

lastCrumb :: SnocPath crumb -> Maybe crumbSource

Get the last crumb from a SnocPath. O(1).

Absolute and Local Paths

type LocalPath = SnocPathSource

A SnocPath from a local origin.

type AbsolutePath = SnocPathSource

A SnocPath from the root.

class ReadPath c crumb | c -> crumb whereSource

A class for contexts that store the current AbsolutePath, allowing transformations to depend upon it.

Methods

absPath :: c -> AbsolutePath crumbSource

Read the current absolute path.

Instances

ReadPath (AbsolutePath crumb) crumb

The simplest instance of ReadPath is AbsolutePath itself.

lastCrumbT :: (ReadPath c crumb, Monad m) => Translate c m a crumbSource

Lifted version of lastCrumb.

absPathT :: (ReadPath c crumb, Monad m) => Translate c m a (AbsolutePath crumb)Source

Lifted version of absPath.