sig
  type param
  type result
  val extend : (Hook.S.param -> Hook.S.result) -> unit
  val extend_once : (Hook.S.param -> Hook.S.result) -> unit
  val apply : Hook.S.param -> Hook.S.result
  val is_empty : unit -> bool
  val clear : unit -> unit
  val length : unit -> int
end