sig   type param   type result   val apply : param -> result   val is_empty : unit -> bool   val clear : unit -> unit   val length : unit -> int   type key   type id   val register_key : Hook.S_ordered.key -> Hook.S_ordered.id   val extend : Hook.S_ordered.id -> (param -> result) -> unit   val extend_once : Hook.S_ordered.id -> (param -> result) -> unit   val add_dependency : Hook.S_ordered.id -> Hook.S_ordered.id -> unit end