Shape.t are constructed by the bin_shape syntax extension from Ocaml type definitions & expressions.
There is a direct mapping from ocaml type definition syntax to the corresponding Shape.group and from ocaml type expression syntax to the corresponding Shape.t.
val sexp_of_t : t -> Ppx_sexp_conv_lib.Sexp.tmodule Tid : sig ... endmodule Vid : sig ... endmodule Location : sig ... endLocation.t is required when constructing shapes for which evaluation might fail.
module Uuid : sig ... endUuid.t is used by basetype and annotate.
val group : Location.t -> (Tid.t * Vid.t list * t) list -> groupThis function is generative; repeated calls create distinct groups
val constr : string -> t option -> poly_variant_rowval inherit_ : Location.t -> t -> poly_variant_rowval poly_variant : Location.t -> poly_variant_row list -> tval var : Location.t -> Vid.t -> tBuilt-in types and types with custom serialization: i.e. int,list,... To avoid accidental protocol compatibility, pass a UUID as the string argument
module Digest : sig ... endmodule Canonical : sig ... endval eval : t -> Canonical.teval t returns the canonical-shape for a shape-expression Shape.t. Type aliases are expanded, so that no Tid.t or Vid.t have significance in the resulting canonical-shape. Type-recursion, including non-regular recursion, is translated to the de-bruijn representation used in canonical-shapes.
eval_to_digest t returns a hash-value direct from the Shape.t, potentially avoiding the intermediate Canonical.t from being constructed. This is important as the size of a canonical-shape might be exponential in terms of the size of the shape expression. The following holds: Digest.(eval_to_digest exp = Canonical.to_digest (eval exp))
val eval_to_digest_string : t -> stringeval_to_digest_string t == Digest.to_hex (eval_to_digest t) Convenience function useful for writing unit tests.
module For_typerep : sig ... end