functor (P : sig module Id : Comparable type t end) ->
sig
type param = P.t
type result = P.t
val apply : param -> result
val is_empty : unit -> bool
val clear : unit -> unit
val length : unit -> int
type key = P.Id.t
type id
val register_key : key -> id
val extend : id -> (param -> result) -> unit
val extend_once : id -> (param -> result) -> unit
val add_dependency : id -> id -> unit
end