`include Common`
`type 'f matcher`````
`type 'f dispatcher`````
`val make_dispatcher : 'f matcher list ‑> 'f dispatcher`

Combines matchers to create a dispatcher

`val any_typ : ('f, 'f, 'captured_types, 'captured_types, 'markers, 'markers, accept_more) template_arg`

Eats a type

`val capt_typ : 'marker ‑> ('marker mtyp ‑> 'f, 'f, 'captured_types, 'marker mtyp * 'captured_types, 'markers, 'marker * 'markers, accept_more) template_arg`

Captures a type than can be back-referenced

`val capt_int : (InferStdlib.IStd.Int64.t ‑> 'f, 'f, 'captured_types, 'captured_types, 'markers, 'markers, accept_more) template_arg`

Captures an int

`val capt_all : (InferIR.Typ.template_arg list ‑> 'f, 'f, 'captured_types, 'captured_types, 'markers, 'markers, end_of_list) template_arg`

Captures all template args

`val (~-) : string ‑> ('f, 'f, unit, 'markers, 'markers) name_matcher`

Starts a path with a name

`val (&+) : ('f_in, 'f_interm, 'captured_types_in, 'markers_interm, 'markers_out, accept_more) templ_matcher ‑> ('f_interm, 'f_out, 'captured_types_in, 'captured_types_out, 'markers_in, 'markers_interm, 'lc) template_arg ‑> ('f_in, 'f_out, 'captured_types_out, 'markers_in, 'markers_out, 'lc) templ_matcher`

Separate template arguments

`val (<) : ('f_in, 'f_interm, 'captured_types_in, 'markers_interm, 'markers_out) name_matcher ‑> ('f_interm, 'f_out, 'captured_types_in, 'captured_types_out, 'markers_in, 'markers_interm, 'lc) template_arg ‑> ('f_in, 'f_out, 'captured_types_out, 'markers_in, 'markers_out, 'lc) templ_matcher`

Starts template arguments after a name

`val (>::) : ('f_in, 'f_out, 'captured_types, 'markers_in, 'markers_out, _) templ_matcher ‑> string ‑> ('f_in, 'f_out, 'captured_types, 'markers_in, 'markers_out) name_matcher`

Ends template arguments and starts a name

`val (&+...>::) : ('f_in, 'f_out, 'captured_types, 'markers_in, 'markers_out, accept_more) templ_matcher ‑> string ‑> ('f_in, 'f_out, 'captured_types, 'markers_in, 'markers_out) name_matcher`

Ends template arguments with eats-ALL and starts a name

`val (&::) : ('f_in, 'f_out, 'captured_types, 'markers_in, 'markers_out) name_matcher ‑> string ‑> ('f_in, 'f_out, 'captured_types, 'markers_in, 'markers_out) name_matcher`

Separates names (accepts ALL template arguments on the left one)

`val (<>::) : ('f_in, 'f_out, 'captured_types, 'markers_in, 'markers_out) name_matcher ‑> string ‑> ('f_in, 'f_out, 'captured_types, 'markers_in, 'markers_out) name_matcher`

Separates names (accepts NO template arguments on the left one)

`val (>-->) : ('f_in, 'f_out, 'captured_types, unit, 'markers, _) templ_matcher ‑> 'f_in ‑> 'f_out matcher`
`val (<>-->) : ('f_in, 'f_out, 'captured_types, unit, 'markers) name_matcher ‑> 'f_in ‑> 'f_out matcher`
`val (&-->) : ('f_in, 'f_out, 'captured_types, unit, 'markers) name_matcher ‑> 'f_in ‑> 'f_out matcher`
`val (&::.*-->) : ('f_in, 'f_out, 'captured_types, unit, 'markers) name_matcher ‑> 'f_in ‑> 'f_out matcher`

After a name, accepts ALL template arguments, accepts ALL path tails (names, templates), accepts ALL function arguments, binds the function