module Structural_descr: sig
.. end
Internal representations of OCaml type as first class values. These values
are called structural descriptors.
Since Carbon-20101201
Type declarations
type
recursive
type
single_pack = private Unmarshal.t
type
pack = private
Structural descriptor used inside structures.
Change in Nitrogen-20111001: this type is now private. Use smart
constructors instead.
type
t = private
Type of internal representations of OCaml type.
Example: the structural descriptor of A | B of int * bool | C of string
is Structure (Sum [| [| p_int; p_bool |]; [| p_string |] |])
. Ok, in
this case, just Abstract
is valid too.
type
structure = private
| |
Sum of pack array array |
| |
Array of pack |
Description with details.
Pack builders
val pack : t -> pack
Pack a structural descriptor in order to embed it inside another one.
Consult the Plugin Development Guide for additional details.
val recursive_pack : recursive -> pack
Pack a recursive descriptor.
Since Nitrogen-20111001
module Recursive: sig
.. end
Use this module for handling a (possibly recursive) structural descriptor
d
.
Predefined descriptors
val t_unknown : t
Since Neon-20130301
val t_abstract : t
Since Neon-20130301
val t_unit : t
val t_int : t
val t_string : t
val t_float : t
val t_bool : t
val t_int32 : t
val t_int64 : t
val t_nativeint : t
val t_record : pack array -> t
val t_tuple : pack array -> t
val t_list : t -> t
val t_ref : t -> t
val t_option : t -> t
val t_array : t -> t
val t_queue : t -> t
val t_sum : pack array array -> t
Since Neon-20130301
Use the functions below only if the compare/hash functions cannot change by
marshalling.
val t_set_unchanged_compares : t -> t
val t_map_unchanged_compares : t -> t -> t
val t_hashtbl_unchanged_hashs : t -> t -> t
Packed versions of predefined descriptors.
val p_abstract : pack
Equivalent to pack Abstract
val p_unit : pack
val p_int : pack
val p_string : pack
val p_float : pack
val p_bool : pack
val p_int32 : pack
val p_int64 : pack
val p_nativeint : pack
Internals
These values must be used only inside the Type library.
exception Cannot_pack
val unsafe_pack : Unmarshal.t -> pack
Raises Cannot_pack
if packing failed.
val of_pack : single_pack -> t
val cleanup : t -> t
val are_consistent : t -> t -> bool
Not symmetrical: check that the second argument is a correct refinement of
the first one.