package yuujinchou

  1. Overview
  2. Docs

The Pattern module defines the patterns.

Pattern Type

type path = string list

The type of hierarchical names.

We assume names are hierarchical and can be encoded as lists of strings. For example, the name x.y.z is represented as the following OCaml list:

["x"; "y"; "z"]
type +'hook t

The type of patterns, parametrized by the type of hook labels. See hook.

The pattern type is abstract---you should build a pattern using the following builders and execute it by

val equal : ('hook -> 'hook -> bool) -> 'hook t -> 'hook t -> bool

Checking equality.

Pattern Builders


val any : 'hook t

any keeps the content of the current tree. It is an error if the tree is empty (no name to match).

val only : path -> 'hook t

only path keeps the subtree rooted at path. It is an error if the subtree was empty.

val in_ : path -> 'hook t -> 'hook t

in_ path pattern runs the pattern pat on the subtree rooted at path. Bindings outside the subtree are kept intact. For example, in_ ["x"]any will keep y (if existing), while only["x"] will drop y.


val none : 'hook t

none drops everything. It is an error if the tree was already empty (nothing to drop).

val except : path -> 'hook t

except p drops the subtree rooted at p. It is an error if there was nothing in the subtree. This is equivalent to in_pnone.


val renaming : path -> path -> 'hook t

renaming path path' relocates the subtree rooted at path to path'. It is an error if the subtree was empty (nothing to move).


val seq : 'hook t list -> 'hook t

seq [pat0; pat1; pat2; ...; patn] runs the patterns pat0, pat1, pat2, ..., patn in order.


val union : 'hook t list -> 'hook t

union [pat0; pat1; pat2; ...; patn] calculates the union of the results of individual patterns pat0, pat1, pat2, ..., patn.

Custom Hooks

val hook : 'hook -> 'hook t

hook h applies the hook labelled h to the entire trie; see Action.run_with_hooks.

Utility Functions

val pp_path : Stdlib.Format.formatter -> Pattern.path -> unit

Pretty printer for path.


Innovation. Community. Security.