functor (P : sig module Id : Comparable end) ->
sig
type param = unit
type result = unit
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