sig
  type 'a or_error = ('a, exn) Result.result
  type path = string
  type t = {
    name : string;
    get : string -> string option Maki_storage.or_error Lwt.t;
    set : string -> string -> unit Maki_storage.or_error Lwt.t;
    remove : string -> unit Lwt.t;
    fold : 'a. f:('-> string * string -> 'Lwt.t) -> x:'-> 'Lwt.t;
    flush_cache : unit -> unit;
  }
  val name : Maki_storage.t -> string
  val get :
    Maki_storage.t -> string -> string option Maki_storage.or_error Lwt.t
  val get_exn : Maki_storage.t -> string -> string option Lwt.t
  val find : Maki_storage.t -> string -> string Lwt.t
  val set :
    Maki_storage.t -> string -> string -> unit Maki_storage.or_error Lwt.t
  val set_exn : Maki_storage.t -> string -> string -> unit Lwt.t
  val remove : Maki_storage.t -> string -> unit Lwt.t
  val fold :
    Maki_storage.t ->
    f:('-> string * string -> 'Lwt.t) -> x:'-> 'Lwt.t
  val flush_cache : Maki_storage.t -> unit
  val none : Maki_storage.t
  val default : ?dir:Maki_storage.path -> unit -> Maki_storage.t Lwt.t
  val set_default : Maki_storage.t -> unit
  val get_default : unit -> Maki_storage.t
end