sig
  val register :
    ?comment:string ->
    plugin:string -> string -> 'Type.t -> journalize:bool -> '-> 'a
  exception Incompatible_type of string
  exception Unbound_value of string
  exception Unloadable of string
  val get : plugin:string -> string -> 'Type.t -> 'a
  val iter : (string -> 'Type.t -> '-> unit) -> unit
  val iter_comment : (string -> string -> unit) -> unit
  module Parameter :
    sig
      module type Common =
        sig
          type t
          val get : string -> unit -> Dynamic.Parameter.Common.t
          val set : string -> Dynamic.Parameter.Common.t -> unit
          val clear : string -> unit -> unit
          val is_set : string -> unit -> bool
          val is_default : string -> unit -> bool
        end
      val get_parameter : string -> Typed_parameter.t
      val get_state : string -> State.t
      val get_name : string -> string -> string -> string
      module Bool :
        sig
          type t = bool
          val get : string -> unit -> t
          val set : string -> t -> unit
          val clear : string -> unit -> unit
          val is_set : string -> unit -> bool
          val is_default : string -> unit -> bool
          val on : string -> unit -> unit
          val off : string -> unit -> unit
        end
      module Int :
        sig
          type t = int
          val get : string -> unit -> t
          val set : string -> t -> unit
          val clear : string -> unit -> unit
          val is_set : string -> unit -> bool
          val is_default : string -> unit -> bool
          val incr : string -> unit -> unit
        end
      module String :
        sig
          type t = string
          val get : string -> unit -> t
          val set : string -> t -> unit
          val clear : string -> unit -> unit
          val is_set : string -> unit -> bool
          val is_default : string -> unit -> bool
        end
      module Filepath :
        sig
          type t = Datatype.Filepath.t
          val get : string -> unit -> t
          val set : string -> t -> unit
          val clear : string -> unit -> unit
          val is_set : string -> unit -> bool
          val is_default : string -> unit -> bool
        end
      module StringSet :
        sig
          type t = Datatype.String.Set.t
          val get : string -> unit -> t
          val set : string -> t -> unit
          val clear : string -> unit -> unit
          val is_set : string -> unit -> bool
          val is_default : string -> unit -> bool
          val add : string -> string -> unit
          val remove : string -> string -> unit
          val is_empty : string -> unit -> bool
          val iter : string -> (string -> unit) -> unit
        end
      module StringList :
        sig
          type t = string list
          val get : string -> unit -> t
          val set : string -> t -> unit
          val clear : string -> unit -> unit
          val is_set : string -> unit -> bool
          val is_default : string -> unit -> bool
          val add : string -> string -> unit
          val append_before : string -> string list -> unit
          val append_after : string -> string list -> unit
          val remove : string -> string -> unit
          val is_empty : string -> unit -> bool
          val iter : string -> (string -> unit) -> unit
        end
    end
  val load_module : string -> unit
  val set_module_load_path : string list -> unit
  val load_plugin_path : unit -> unit
end