Module type Mirage.KEY

module Arg : sig ... end
type 'a value = 'a Functoria_key.value
val pure : 'a -> 'a value
val ($) : ('a -> 'b) value -> 'a value -> 'b value
val map : ('a -> 'b) -> 'a value -> 'b value
val if_ : bool value -> 'a -> 'a -> 'a value
val match_ : 'a value -> ('a -> 'b) -> 'b value
val default : 'a value -> 'a
type 'a key = 'a Functoria_key.key
val create : string -> 'a Arg.t -> 'a key
val value : 'a key -> 'a value
type t = Functoria_key.t
module Set : sig ... end
val abstract : 'a key -> t
val compare : t -> t -> int
val pp : t Fmt.t
val of_deps : Set.t -> unit value
val deps : 'a value -> Set.t
val pp_deps : 'a value Fmt.t
val is_runtime : t -> bool
val is_configure : t -> bool
val filter_stage : Arg.stage -> Set.t -> Set.t
module Alias : sig ... end
val alias : string -> 'a Alias.t -> 'a key
val aliases : t -> Set.t
val name : t -> string
type context = Functoria_key.context
val dump_context : context Fmt.t
val empty_context : context
val merge_context : default:context -> context -> context
val add_to_context : 'a key -> 'a -> context -> context
val context : ?⁠stage:Arg.stage -> with_required:bool -> Set.t -> context Cmdliner.Term.t
val mem : context -> 'a value -> bool
val peek : context -> 'a value -> 'a option
val eval : context -> 'a value -> 'a
val get : context -> 'a key -> 'a
val pps : context -> Set.t Fmt.t
val ocaml_name : t -> string
val serialize_call : t Fmt.t
val serialize : context -> t Fmt.t
val module_name : string