sig
  module Dict :
    sig
      type t
      type data = S of string | L of string list | D of Rascl.Dict.t
      val create : ?locked:bool -> unit -> Rascl.Dict.t
      val get :
        ?prefix:string list -> string -> Rascl.Dict.t -> Rascl.Dict.data
      val set :
        ?prefix:string list ->
        string -> Rascl.Dict.data -> Rascl.Dict.t -> unit
      val get_string :
        ?prefix:string list -> string -> Rascl.Dict.t -> string
      val get_dict :
        ?prefix:string list -> string -> Rascl.Dict.t -> Rascl.Dict.t
      val get_list :
        ?prefix:string list -> string -> Rascl.Dict.t -> string list
      val set_string :
        ?prefix:string list -> string -> string -> Rascl.Dict.t -> unit
      val set_list :
        ?prefix:string list -> string -> string list -> Rascl.Dict.t -> unit
      val set_dict :
        ?prefix:string list -> string -> Rascl.Dict.t -> Rascl.Dict.t -> unit
      val copy : Rascl.Dict.t -> Rascl.Dict.t
      val iter : (string -> Rascl.Dict.data -> unit) -> Rascl.Dict.t -> unit
      val map :
        (string -> Rascl.Dict.data -> Rascl.Dict.data) ->
        Rascl.Dict.t -> Rascl.Dict.t
      val filter :
        (string -> Rascl.Dict.data -> bool) -> Rascl.Dict.t -> Rascl.Dict.t
      val do_in :
        string list -> (Rascl.Dict.t -> unit) list -> Rascl.Dict.t -> unit
      val get_from :
        string list ->
        string list -> Rascl.Dict.t -> (string * Rascl.Dict.data) list
      val set_in :
        string list ->
        (string * Rascl.Dict.data) list -> Rascl.Dict.t -> unit
      module Unsafe :
        sig
          val set_size : int -> unit
          val get_subdict : string list -> Rascl.Dict.t -> Rascl.Dict.t
          val detach_subdict : string list -> Rascl.Dict.t -> Rascl.Dict.t
          val alist_of_dict :
            ?strict:bool ->
            ?prefix:string list -> Rascl.Dict.t -> (string * string) list
          val exists :
            ?prefix:string list ->
            (string -> Rascl.Dict.data -> bool) -> Rascl.Dict.t -> bool
          val lock_structure : Rascl.Dict.t -> unit
          val unlock_structure : Rascl.Dict.t -> unit
          val update_from : Rascl.Dict.t -> Rascl.Dict.t -> unit
          val dump : Rascl.Dict.t -> unit
        end
    end
  module Parser :
    sig
      type token
      val config_dict :
        (Lexing.lexbuf -> Rascl.Parser.token) ->
        Lexing.lexbuf -> Rascl.Dict.t
    end
  module Lexer :
    sig
      exception LexerError of string
      val dict : Lexing.lexbuf -> Rascl.Parser.token
    end
  module ConfigObject :
    sig
      class virtual config_base :
        Rascl.Dict.t ->
        Rascl.Dict.t ->
        string list option ->
        object
          method dump : unit
          method private get : string -> Rascl.Dict.data
          method private get_bool : string -> bool
          method private get_bool_list : string -> bool list
          method private get_dict : string -> Rascl.Dict.t
          method private get_float : string -> float
          method private get_float_list : string -> float list
          method private get_int : string -> int
          method private get_int_list : string -> int list
          method private get_list : string -> string list
          method private get_string : string -> string
          method private get_string_list : string -> string list
          method private set : string -> Rascl.Dict.data -> unit
          method private set_bool : string -> bool -> unit
          method private set_bool_list : string -> bool list -> unit
          method private set_float : string -> float -> unit
          method private set_float_list : string -> float list -> unit
          method private set_int : string -> int -> unit
          method private set_int_list : string -> int list -> unit
          method private set_list : string -> string list -> unit
          method private set_string : string -> string -> unit
          method private set_string_list : string -> string list -> unit
        end
      class virtual root_config :
        string list ->
        string ->
        Rascl.Dict.t ->
        Rascl.Dict.t ->
        object
          method dump : unit
          method private get : string -> Dict.data
          method private get_bool : string -> bool
          method private get_bool_list : string -> bool list
          method private get_dict : string -> Dict.t
          method private get_float : string -> float
          method private get_float_list : string -> float list
          method private get_int : string -> int
          method private get_int_list : string -> int list
          method private get_list : string -> string list
          method private get_string : string -> string
          method private get_string_list : string -> string list
          method load : unit -> unit
          method private set : string -> Dict.data -> unit
          method private set_bool : string -> bool -> unit
          method private set_bool_list : string -> bool list -> unit
          method private set_float : string -> float -> unit
          method private set_float_list : string -> float list -> unit
          method private set_int : string -> int -> unit
          method private set_int_list : string -> int list -> unit
          method private set_list : string -> string list -> unit
          method private set_string : string -> string -> unit
          method private set_string_list : string -> string list -> unit
        end
      class virtual sub_config :
        Rascl.Dict.t ->
        Rascl.Dict.t ->
        string list ->
        object
          method dump : unit
          method private get : string -> Dict.data
          method private get_bool : string -> bool
          method private get_bool_list : string -> bool list
          method private get_dict : string -> Dict.t
          method private get_float : string -> float
          method private get_float_list : string -> float list
          method private get_int : string -> int
          method private get_int_list : string -> int list
          method private get_list : string -> string list
          method private get_string : string -> string
          method private get_string_list : string -> string list
          method private set : string -> Dict.data -> unit
          method private set_bool : string -> bool -> unit
          method private set_bool_list : string -> bool list -> unit
          method private set_float : string -> float -> unit
          method private set_float_list : string -> float list -> unit
          method private set_int : string -> int -> unit
          method private set_int_list : string -> int list -> unit
          method private set_list : string -> string list -> unit
          method private set_string : string -> string -> unit
          method private set_string_list : string -> string list -> unit
        end
    end
  val read_config_file : string -> Rascl.Dict.t
end