package grenier

  1. Overview
  2. Docs
type 'a graph = 'a Fastdom.graph = {
  1. memoize : 'b. ('a -> 'b) -> 'a -> 'b;
    (*

    Memoize a function on nodes

    *)
  2. successors : 'b. ('b -> 'a -> 'b) -> 'b -> 'a -> 'b;
    (*

    Fold over successors of a node

    *)
}

Representation of a graph with nodes of type 'a

Rewrite a (possibly cyclic) directed graph by introducing let-binders at dominating nodes

type ('term, 'var) binding_structure = {
  1. map_subterms : ('term -> 'term) -> 'term -> 'term;
  2. name_term : 'term -> 'var;
  3. var_term : 'var -> 'term;
  4. introduce_let : recursive:bool -> ('var * 'term) list -> 'term -> 'term;
}
val explicit_sharing : 'a graph -> ('a, 'b) binding_structure -> 'a -> 'a