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