functor (P : sig type t end) -> sig type param = P.t val extend : (param -> unit) -> unit val apply : param -> unit val is_empty : unit -> bool val clear : unit -> unit val length : unit -> int end