Module Val.Portable

type hash = hash
type t
val t : t Irmin.Type.t
val metadata_t : metadata Irmin.Type.t
type contents_key = hash
val contents_key_t : contents_key Irmin.Type.t
type node_key = hash
val node_key_t : node_key Irmin.Type.t
val step_t : step Irmin.Type.t
type value = [
  1. | `Contents of contents_key * metadata
  2. | `Node of node_key
]
val value_t : value Irmin.Type.t
val hash_t : hash Irmin.Type.t
val of_list : (step * value) list -> t
val list : ?offset:int -> ?length:int -> ?cache:bool -> t -> (step * value) list
val of_seq : (unit -> (step * value) Stdlib__Seq.node) -> t
val seq : ?offset:int -> ?length:int -> ?cache:bool -> t -> unit -> (step * value) Stdlib__Seq.node
val empty : unit -> t
val is_empty : t -> bool
val length : t -> int
val hash_exn : ?force:bool -> t -> hash
val clear : t -> unit
val find : ?cache:bool -> t -> step -> value option
val add : t -> step -> value -> t
val remove : t -> step -> t
module Metadata : sig ... end
val with_handler : ((expected_depth:int -> node_key -> t option) -> expected_depth:int -> node_key -> t option) -> t -> t
val head : t -> [ `Inode of int * (int * hash) list | `Node of (step * value) list ]
val of_node : t -> t
val merge : contents:contents_key option Irmin.Merge.t -> node:node_key option Irmin.Merge.t -> t Irmin.Merge.t
type proof = [
  1. | `Blinded of hash
  2. | `Inode of int * (int * proof) list
  3. | `Values of (step * value) list
]
val proof_t : proof Irmin.Type.t
val to_proof : t -> proof
val of_proof : depth:int -> proof -> t option
module Proof : sig ... end