Irmin, a distributed database that follows the same design principles as Git
Module Irmin . Node
module type S = sig ... end
module Make (Hash : Hash.S) (Path : sig ... end) (Metadata : Metadata.S) : S with type hash = Hash.t and type metadata = Metadata.t and type step = Path.step

Make provides a simple node implementation, parameterized by hash, path and metadata implementations. The contents and node values are addressed directly by their hash.

module Generic_key : sig ... end

Generic_key generalises the concept of "node" to one that supports object keys that are not strictly equal to hashes.

module V1 (N : Generic_key.S with type step = string) : sig ... end

v1 serialisation

module Portable : sig ... end

Portable form of a node implementation that can be constructed from a concrete representation and used in computing hashes. Conceptually, a Node.Portable.t is a Node.t in which all internal keys have been replaced with the hashes of the values they point to.

module type Store = sig ... end

Store specifies the signature for node stores.

module Store (C : Contents.Store) (S : Content_addressable.S with type key = C.key) (H : Hash.S with type t = S.key) (V : S with type t = S.value and type hash = S.key) (M : Metadata.S with type t = V.metadata) (P : Path.S with type step = V.step) : Store with type 'a t = 'a C.t * 'a S.t and type key = S.key and type value = S.value and type hash = H.t and module Path = P and module Metadata = M and module Val = V

Store creates node stores.

module type Graph = sig ... end

Graph specifies the signature for node graphs. A node graph is a deterministic DAG, labeled by steps.

module Graph (N : Store) : Graph with type 'a t = 'a N.t and type contents_key = N.Contents.key and type node_key = N.key and type metadata = N.Metadata.t and type step = N.Path.step and type path = N.Path.t