functor (M : sig type t end->
  sig
    type t = M.t
    val add_hook : string -> (hook_info -> t -> t) -> unit
    val apply_hooks : hook_info -> t -> t
  end