include Bin_shape_lib.Std.Shape
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.t
module Tid : sig ... end
module Vid : sig ... end
module Location : sig ... end
Location.t
is required when constructing shapes for which evaluation might fail.
module Uuid : sig ... end
Uuid.t
is used by basetype
and annotate
.
val group : Location.t -> (Tid.t * Vid.t list * t) list -> group
This function is generative; repeated calls create distinct groups
val constr : string -> t option -> poly_variant_row
val inherit_ : Location.t -> t -> poly_variant_row
val poly_variant : Location.t -> poly_variant_row list -> t
val var : Location.t -> Vid.t -> t
Built-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 ... end
module Canonical : sig ... end
val eval : t -> Canonical.t
eval 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 -> string
eval_to_digest_string t
== Digest.to_hex (eval_to_digest t)
Convenience function useful for writing unit tests.
module For_typerep : sig ... end
val bin_shape_unit : t
val bin_shape_bool : t
val bin_shape_string : t
val bin_shape_bytes : t
val bin_shape_char : t
val bin_shape_float : t
val bin_shape_int : t
val bin_shape_int32 : t
val bin_shape_int63 : t
val bin_shape_int64 : t
val bin_shape_nativeint : t
val bin_shape_nat0 : t
val bin_shape_digest : t
val bin_shape_float32_vec : t
val bin_shape_float64_vec : t
val bin_shape_vec : t
val bin_shape_float32_mat : t
val bin_shape_float64_mat : t
val bin_shape_mat : t
val bin_shape_bigstring : t
val bin_shape_variant_int : t
val bin_shape_int_8bit : t
val bin_shape_int_16bit : t
val bin_shape_int_32bit : t
val bin_shape_int_64bit : t
val bin_shape_int64_bits : t
val bin_shape_network16_int : t
val bin_shape_network32_int : t
val bin_shape_network32_int32 : t
val bin_shape_network64_int : t
val bin_shape_network64_int64 : t
val bin_shape_float_array : t