functor (X : sig  end->   sig     type param = unit     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