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