package travesty
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=6096bfedbab2044c6372c918712bc5e71ffba5a373cdab37398787712c9c83af
sha512=a7a1cd7981af2c16111323cdf72ac6a45a5e58a3701376fdb3d7f3ee15fbf4003e71f94ad882ccea0d308bb229f3ac0b2c9861a231a498c22e44551f1fcf802d
doc/travesty.containers/Travesty_containers/Zipper/index.html
Module Travesty_containers.Zipper
Source
Zipper
implements the 'list zipper' data structure.
A list zipper contains two lists: a 'right list', which represents a sequence of data to be processed; and a 'left list', which collects the sequence of data already processed in reverse order. At any point, the first element in the right list---the 'cursor'---represents the item currently being processed.
The usual use case of a zipper is to 'slide' across the right list, moving elements onto the left list one by one, and then 'rewind' the left list back onto the right for further processing.
These versions of the list zipper contains a few extensions. First, many operations can be parametrised by a monad---this will usually be an error monad like Or_error
, but can be anything else (like a state transformer).
Second, items in zippers constructed using Make_marked can be mark
ed, attaching a tag to them; later on, if the item still exists in the zipper, the zipper can be rewound back to the mark using recall
.
For documentation on the signatures of both zippers and the parameters of the functors below, see also Zipper_intf.
include module type of Zipper_intf
S_non_monadic
contains the core operations of a zipper, without any parametrisation over a particular failure monad.
S_monadic
contains the core operations of a zipper, parametrised over a particular failure monad.
S
contains S_non_monadic
; a functor for generating S_monadic
over a custom monad; and specialisations of it over common monads.
type ('mark, 'a, 'acc, 'final) fold_outcome = [
| `Stop of 'final
(*Stop folding, immediately return
*)| `Drop of 'acc
(*Drop the cursor and continue
*)| `Swap of 'a * 'acc
(*Replace cursor with a new value
*)| `Mark of 'mark * 'a * 'acc
(*Replace, and mark, the cursor
*)
]
The type of instructions returned by functions used with fold_until_m
and fold_until
.
S_marked_non_monadic
extends S_non_monadic
to add functions for manipulating marks.
S_marked_monadic
extends S_monadic
to add functions for manipulating marks.
Basic_mark
is the interface that mark types must implement.
Plain zippers
Marked zippers
Make_marked
makes a marked zipper from a Basic_mark
.
Int_mark_zipper
is a marked zipper whose marks are integers.