functor
  (M : sig
         val name : string
         val default : Cil_types.kernel_function -> bool
         val parameter : Typed_parameter.t
         val additional_parameters : Typed_parameter.t list
       end->
  sig
    module H :
      sig
        val self : State.t
        val name : string
        val mark_as_computed : ?project:Project.t -> unit -> unit
        val is_computed : ?project:Project.t -> unit -> bool
        module Datatype : Datatype.S
        val add_hook_on_update : (Datatype.t -> unit) -> unit
        val howto_marshal : (Datatype.t -> 'a) -> ('-> Datatype.t) -> unit
        type key = Kernel_function.t
        type data = Datatype.Bool.t
        val replace : key -> data -> unit
        val add : key -> data -> unit
        val clear : unit -> unit
        val length : unit -> int
        val iter : (key -> data -> unit) -> unit
        val iter_sorted :
          ?cmp:(key -> key -> int) -> (key -> data -> unit) -> unit
        val fold : (key -> data -> '-> 'a) -> '-> 'a
        val fold_sorted :
          ?cmp:(key -> key -> int) -> (key -> data -> '-> 'a) -> '-> 'a
        val memo : ?change:(data -> data) -> (key -> data) -> key -> data
        val find : key -> data
        val find_all : key -> data list
        val mem : key -> bool
        val remove : key -> unit
      end
    val is_computed : Generator.Make.H.key -> Generator.Make.H.data
    val set : Generator.Make.H.key -> Generator.Make.H.data -> unit
    val self : State.t
    val triple :
      string * (Generator.Make.H.key -> Generator.Make.H.data -> unit) *
      (Generator.Make.H.key -> Generator.Make.H.data)
  end