Private.Importinclude sig ... endinclude module type of struct include Ppxlib.Ast endand location_stack = location listand modalities = Astlib.Ast_500.Parsetree.modality loc listand modes = Astlib.Ast_500.Parsetree.mode loc listand longident = Astlib.Longident.t = Auxiliary AST types used by parsetree and typedtree.
and arg_label = Astlib.Ast_500.Asttypes.arg_label = and index_kind = Astlib.Ast_500.Asttypes.index_kind = Abstract syntax tree produced by parsing
and constant = Astlib.Ast_500.Parsetree.constant = | Pconst_integer of string * char optionInteger constants such as 3 3l 3L 3n.
Suffixes [g-z][G-Z] are accepted by the parser. Suffixes except 'l', 'L' and 'n' are rejected by the typechecker
| Pconst_unboxed_integer of string * charInteger constants such as #3 #3l #3L #3n.
A suffix [g-z][G-Z] is required by the parser. Suffixes except 'l', 'L' and 'n' are rejected by the typechecker
| Pconst_char of charCharacter such as 'c'.
| Pconst_untagged_char of charUntagged character such as #'c'.
| Pconst_string of string * location * string optionConstant string such as "constant" or {delim|other constant|delim}.
The location span the content of the string, without the delimiters.
*)| Pconst_float of string * char optionFloat constant such as 3.4, 2e5 or 1.4e-4.
Suffixes [g-z][G-Z] are accepted by the parser. Suffixes are rejected by the typechecker.
| Pconst_unboxed_float of string * char optionFloat constant such as #3.4, #2e5 or #1.4e-4.
Suffixes [g-z][G-Z] are accepted by the parser. Suffixes except 's' are rejected by the typechecker.
Attributes such as [@id ARG] and [@@id ARG].
Metadata containers passed around within the AST. The compiler ignores unknown attributes.
Extension points such as [%id ARG] and [%%id ARG].
Sub-language placeholder -- rejected by the typechecker.
and attributes = attribute listand payload = Astlib.Ast_500.Parsetree.payload = | PStr of structure| PSig of signature: SIG in an attribute or an extension point
| PTyp of core_type: T in an attribute or an extension point
| PPat of pattern * expression option? P or ? P when E, in an attribute or an extension point
and core_type = Astlib.Ast_500.Parsetree.core_type = {ptyp_desc : core_type_desc;ptyp_loc : location;ptyp_loc_stack : location_stack;ptyp_attributes : attributes;... [@id1] [@id2]
}and core_type_desc = Astlib.Ast_500.Parsetree.core_type_desc = | Ptyp_any of Astlib.Ast_500.Parsetree.jkind_annotation option_ or _ : k
| Ptyp_var of string * Astlib.Ast_500.Parsetree.jkind_annotation optionA type variable such as 'a or 'a : k
| Ptyp_arrow of arg_label * core_type * core_type * modes * modes| Ptyp_tuple of (string option * core_type) listPtyp_tuple(tl) represents a product type:
T1 * ... * Tn when tl is (None,T1);...;(None,Tn)L1:T1 * ... * Ln:Tn when tl is (Some L1,T1);...;(Some Ln,Tn)L1:T1 * T2 when tl is (Some L1,T1);(None,T2)Invariant: n >= 2.
| Ptyp_unboxed_tuple of (string option * core_type) listUnboxed tuple types: Ptyp_unboxed_tuple([(Some l1,P1);...;(Some l2,Pn)] represents a product type #(l1:T1 * ... * l2:Tn), and the labels are optional.
Invariant: n >= 2.
| Ptyp_constr of longident_loc * core_type listPtyp_constr(lident, l) represents:
tconstr when l=[],T tconstr when l=[T],(T1, ..., Tn) tconstr when l=[T1 ; ... ; Tn].| Ptyp_object of object_field list * closed_flag| Ptyp_class of longident_loc * core_type listPtyp_class(tconstr, l) represents:
#tconstr when l=[],T #tconstr when l=[T],(T1, ..., Tn) #tconstr when l=[T1 ; ... ; Tn].| Ptyp_alias of core_type
* string loc option
* Astlib.Ast_500.Parsetree.jkind_annotation optionT as 'a or T as ('a : k) or T as (_ : k).
Invariant: the name or jkind annotation is non-None.
*)| Ptyp_variant of row_field list * closed_flag * label list option| Ptyp_poly of (string loc * Astlib.Ast_500.Parsetree.jkind_annotation option)
list
* core_type'a1 ... 'an. T ('a1 : k1) ... ('an : kn). T
Can only appear in the following context:
core_type of a Ppat_constraint node corresponding to a constraint on a let-binding: let x : 'a1 ... 'an. T = e ...Cfk_virtual for methods (not values).core_type of a Pctf_method node.pld_type field of a label_declaration.core_type of a Ptyp_object node.pval_type field of a value_description.| Ptyp_package of package_type(module S).
| Ptyp_quote of core_type<[T]>
| Ptyp_splice of core_type$T
| Ptyp_of_kind of Astlib.Ast_500.Parsetree.jkind_annotation(type : k)
| Ptyp_extension of extension[%id].
and package_type = longident_loc * (longident_loc * core_type) listAs package_type typed values:
(S, []) represents (module S),(S, [(t1, T1) ; ... ; (tn, Tn)]) represents (module S with type t1 = T1 and ... and tn = Tn).and row_field = Astlib.Ast_500.Parsetree.row_field = {prf_desc : row_field_desc;prf_loc : location;prf_attributes : attributes;}and row_field_desc = Astlib.Ast_500.Parsetree.row_field_desc = | Rtag of label loc * bool * core_type listRtag(`A, b, l) represents:
`A when b is true and l is [],`A of T when b is false and l is [T],`A of T1 & .. & Tn when b is false and l is [T1;...Tn],`A of & T1 & .. & Tn when b is true and l is [T1;...Tn].bool field is true if the tag contains a constant (empty) constructor.& occurs when several types are used for the same constructor (see 4.2 in the manual)| Rinherit of core_type[ | t ]
and object_field = Astlib.Ast_500.Parsetree.object_field = {pof_desc : object_field_desc;pof_loc : location;pof_attributes : attributes;}and object_field_desc = Astlib.Ast_500.Parsetree.object_field_desc = and pattern = Astlib.Ast_500.Parsetree.pattern = {ppat_desc : pattern_desc;ppat_loc : location;ppat_loc_stack : location_stack;ppat_attributes : attributes;... [@id1] [@id2]
}and pattern_desc = Astlib.Ast_500.Parsetree.pattern_desc = | Ppat_anyThe pattern _.
| Ppat_var of string locA variable pattern such as x
| Ppat_alias of pattern * string locAn alias pattern such as P as 'a
| Ppat_constant of constantPatterns such as 1, 'a', "true", 1.0, 1l, 1L, 1n
| Ppat_interval of constant * constantPatterns such as 'a'..'z'.
Other forms of interval are recognized by the parser but rejected by the type-checker.
*)| Ppat_tuple of (string option * pattern) list * closed_flagPpat_tuple(pl, Closed) represents
(P1, ..., Pn) when pl is (None, P1);...;(None, Pn)(~L1:P1, ..., ~Ln:Pn) when pl is (Some L1, P1);...;(Some Ln, Pn)(~L1:P1, P2) when pl is (Some L1, P1);(None, P2)..Invariant:
n >= 2.n >= 1.| Ppat_unboxed_tuple of (string option * pattern) list * closed_flagUnboxed tuple patterns: #(l1:P1, ..., ln:Pn) is ([(Some l1,P1);...;(Some l2,Pn)], Closed), and the labels are optional. An Open pattern ends in ...
Invariant:
n >= 2n >= 1| Ppat_construct of longident_loc
* ((string loc * Astlib.Ast_500.Parsetree.jkind_annotation option) list
* pattern)
optionPpat_construct(C, args) represents:
C when args is None,C P when args is Some ([], P)C (P1, ..., Pn) when args is Some ([], Ppat_tuple [P1; ...; Pn])C (type a b) P when args is Some ([a, None; b, None], P)C (type (a : k) b) P when args is Some ([a, Some k; b, None], P)| Ppat_variant of label * pattern optionPpat_variant(`A, pat) represents:
`A when pat is None,`A P when pat is Some P| Ppat_record of (longident_loc * pattern) list * closed_flag| Ppat_record_unboxed_product of (longident_loc * pattern) list * closed_flag| Ppat_array of mutable_flag * pattern listPattern [| P1; ...; Pn |] or [: P1; ...; Pn :]
| Ppat_or of pattern * patternPattern P1 | P2
| Ppat_constraint of pattern * core_type option * modesPpat_constraint(tyopt, modes) represents:
(P : ty @@ modes) when tyopt is Some ty(P @ modes) when tyopt is None| Ppat_type of longident_locPattern #tconst
| Ppat_lazy of patternPattern lazy P
| Ppat_unpack of string option locPpat_unpack(s) represents:
(module P) when s is Some "P"(module _) when s is NoneNote: (module P : S) is represented as Ppat_constraint(Ppat_unpack(Some "P"), Ptyp_package S)
| Ppat_exception of patternPattern exception P
| Ppat_extension of extensionPattern [%id]
| Ppat_open of longident_loc * patternPattern M.(P)
and expression = Astlib.Ast_500.Parsetree.expression = {pexp_desc : expression_desc;pexp_loc : location;pexp_loc_stack : location_stack;pexp_attributes : attributes;... [@id1] [@id2]
}and expression_desc = Astlib.Ast_500.Parsetree.expression_desc = | Pexp_ident of longident_locIdentifiers such as x and M.x
| Pexp_constant of constantExpressions constant such as 1, 'a', "true", 1.0, 1l, 1L, 1n
| Pexp_let of mutable_flag * rec_flag * value_binding list * expressionPexp_let(mut, rec, [(P1,E1) ; ... ; (Pn,En)], E) represents:
let P1 = E1 and ... and Pn = EN in E when rec is Nonrecursive and mut = Immutable.let rec P1 = E1 and ... and Pn = EN in E when rec is Recursive and mut = Immutable.let mutable P1 = E1 in E when rec is Nonrecursive and mut = Mutable. Invariant: If mut = Mutable then n = 1 and rec = Nonrecursive| Pexp_function of function_param list * function_constraint * function_bodyPexp_function ([P1; ...; Pn], C, body) represents any construct involving fun or function, including:
fun P1 ... Pn -> E when body = Pfunction_body Efun P1 ... Pn -> function p1 -> e1 | ... | pm -> em when body = Pfunction_cases [ p1 -> e1; ...; pm -> em ]C represents a type constraint or coercion placed immediately before the arrow, e.g. fun P1 ... Pn : ty -> ... when C = Some (Pconstraint ty).
A function must have parameters. Pexp_function (params, _, body) must have non-empty params or a Pfunction_cases _ body.
| Pexp_apply of expression * (arg_label * expression) list| Pexp_match of expression * casesmatch E0 with P1 -> E1 | ... | Pn -> En
| Pexp_try of expression * casestry E0 with P1 -> E1 | ... | Pn -> En
| Pexp_tuple of (string option * expression) listPexp_tuple(el) represents
(E1, ..., En) when el is (None, E1);...;(None, En)(~L1:E1, ..., ~Ln:En) when el is (Some L1, E1);...;(Some Ln, En)(~L1:E1, E2) when el is (Some L1, E1); (None, E2)Invariant: n >= 2
| Pexp_unboxed_tuple of (string option * expression) listUnboxed tuple expressions: Pexp_unboxed_tuple([(Some l1,P1);...;(Some l2,Pn)]) represents #(l1:E1, ..., ln:En), and the labels are optional.
Invariant: n >= 2
| Pexp_construct of longident_loc * expression optionPexp_construct(C, exp) represents:
C when exp is None,C E when exp is Some E,C (E1, ..., En) when exp is Some (Pexp_tuple[E1;...;En])| Pexp_variant of label * expression optionPexp_variant(`A, exp) represents
`A when exp is None`A E when exp is Some E| Pexp_record of (longident_loc * expression) list * expression optionPexp_record([(l1,P1) ; ... ; (ln,Pn)], exp0) represents
{ l1=P1; ...; ln=Pn } when exp0 is None{ E0 with l1=P1; ...; ln=Pn } when exp0 is Some E0Invariant: n > 0
| Pexp_record_unboxed_product of (longident_loc * expression) list
* expression optionPexp_record_unboxed_product([(l1,P1) ; ... ; (ln,Pn)], exp0) represents
#{ l1=P1; ...; ln=Pn } when exp0 is None#{ E0 with l1=P1; ...; ln=Pn } when exp0 is Some E0Invariant: n > 0
| Pexp_field of expression * longident_locE.l
| Pexp_unboxed_field of expression * longident_locE.#l
| Pexp_setfield of expression * longident_loc * expressionE1.l <- E2
| Pexp_array of mutable_flag * expression list[| E1; ...; En |] or [: E1; ...; En :]
| Pexp_idx of block_access * unboxed_access list(BA1 UA1 UA2 ...) e.g. (.foo.#bar.#baz) Above, BA1=.foo, UA1=.#bar, and UA2=#.baz
| Pexp_ifthenelse of expression * expression * expression optionif E1 then E2 else E3
| Pexp_sequence of expression * expressionE1; E2
| Pexp_while of expression * expressionwhile E1 do E2 done
| Pexp_for of pattern * expression * expression * direction_flag * expression| Pexp_constraint of expression * core_type option * modes(E : T @@ modes)
| Pexp_coerce of expression * core_type option * core_typePexp_coerce(E, from, T) represents
(E :> T) when from is None,(E : T0 :> T) when from is Some T0.| Pexp_send of expression * label locE # m
| Pexp_new of longident_locnew M.c
| Pexp_setvar of label loc * expressionx <- 2
| Pexp_override of (label loc * expression) list{< x1 = E1; ...; xn = En >}
| Pexp_letmodule of string option loc * module_expr * expressionlet module M = ME in E
| Pexp_letexception of extension_constructor * expressionlet exception C in E
| Pexp_assert of expressionassert E.
Note: assert false is treated in a special way by the type-checker.
| Pexp_lazy of expressionlazy E
| Pexp_poly of expression * core_type optionUsed for method bodies.
Can only be used as the expression under Cfk_concrete for methods (not values).
| Pexp_object of class_structureobject ... end
| Pexp_newtype of string loc
* Astlib.Ast_500.Parsetree.jkind_annotation option
* expressionfun (type t) -> E or fun (type t : k) -> E
| Pexp_pack of module_expr(module ME).
(module ME : S) is represented as Pexp_constraint(Pexp_pack ME, Ptyp_package S)
| Pexp_open of open_declaration * expressionM.(E)let open M in Elet open! M in E| Pexp_letop of letoplet* P = E0 in E1let* P0 = E00 and* P1 = E01 in E1| Pexp_extension of extension[%id]
| Pexp_unreachable.
| Pexp_stack of expression| Pexp_comprehension of comprehension_expression[? BODY ...CLAUSES... ?], where:
? is either "" (list), : (immutable array), or | (array).BODY is an expression.CLAUSES is a series of comprehension_clause.| Pexp_overwrite of expression * expression| Pexp_quote of expressionruntime metaprogramming quotations <E>
| Pexp_splice of expressionruntime metaprogramming splicing $(E)
*)| Pexp_holeand case = Astlib.Ast_500.Parsetree.case = {pc_lhs : pattern;pc_guard : expression option;pc_rhs : expression;}Values of type case represents (P -> E) or (P when E0 -> E)
and letop = Astlib.Ast_500.Parsetree.letop = {let_ : binding_op;ands : binding_op list;body : expression;}and binding_op = Astlib.Ast_500.Parsetree.binding_op = {pbop_op : string loc;pbop_pat : pattern;pbop_exp : expression;pbop_loc : location;}and function_param_desc = Astlib.Ast_500.Parsetree.function_param_desc = | Pparam_val of arg_label * expression option * patternPparam_val (lbl, exp0, P) represents the parameter:
P when lbl is Nolabel and exp0 is None~l:P when lbl is Labelled l and exp0 is None?l:P when lbl is Optional l and exp0 is None?l:(P = E0) when lbl is Optional l and exp0 is Some E0Note: If E0 is provided, only Optional is allowed.
| Pparam_newtype of string loc * Astlib.Ast_500.Parsetree.jkind_annotation optionPparam_newtype x represents the parameter (type x). x carries the location of the identifier, whereas the pparam_loc on the enclosing function_param node is the location of the (type x) as a whole.
Multiple parameters (type a b c) are represented as multiple Pparam_newtype nodes, let's say:
[ { pparam_kind = Pparam_newtype a; pparam_loc = loc1 };
{ pparam_kind = Pparam_newtype b; pparam_loc = loc2 };
{ pparam_kind = Pparam_newtype c; pparam_loc = loc3 };
]Here, the first loc loc1 is the location of (type a b c), and the subsequent locs loc2 and loc3 are the same as loc1, except marked as ghost locations. The locations on a, b, c, correspond to the variables a, b, and c in the source code.
and function_param = Astlib.Ast_500.Parsetree.function_param = {pparam_loc : location;pparam_desc : function_param_desc;}and function_body = Astlib.Ast_500.Parsetree.function_body = | Pfunction_body of expression| Pfunction_cases of case list * location * attributesIn Pfunction_cases (_, loc, attrs), the location extends from the start of the function keyword to the end of the last case. The compiler will only use typechecking-related attributes from attrs, e.g. enabling or disabling a warning.
See the comment on Pexp_function.
and type_constraint = Astlib.Ast_500.Parsetree.type_constraint = and function_constraint = Astlib.Ast_500.Parsetree.function_constraint = {mode_annotations : modes;The mode annotation placed on a function let-binding, e.g. let local_ f x : int -> int = .... The local_ syntax is parsed into two nodes: the field here, and pvb_modes. This field only affects the interpretation of ret_type_constraint, while the latter is translated in typecore to Pexp_constraint to contrain the mode of the function.
ret_mode_annotations : modes;The mode annotation placed on a function's body, e.g. let f x : int -> int @@ local = .... This field constrains the mode of function's body.
ret_type_constraint : type_constraint option;The type constraint placed on a function's body.
*)}See the comment on Pexp_function.
and block_access = Astlib.Ast_500.Parsetree.block_access = | Baccess_field of longident_loc.foo
| Baccess_array of mutable_flag * index_kind * expressionMutable array accesses: .(E), .L(E), .l(E), .n(E) Immutable array accesses: .:(E), .:L(E), .:l(E), .:n(E)
Indexed by int, int64#, int32#, or nativeint#, respectively.
| Baccess_block of mutable_flag * expressionAccess using another block index: .idx_imm(E), .idx_mut(E) (usually followed by unboxed accesses, to deepen the index).
and unboxed_access = Astlib.Ast_500.Parsetree.unboxed_access = | Uaccess_unboxed_field of longident_loc.#foo
and comprehension_iterator = Astlib.Ast_500.Parsetree.comprehension_iterator = | Pcomp_range of {start : expression;stop : expression;direction : direction_flag;}"= START to STOP" (direction = Upto) "= START downto STOP" (direction = Downto)
*)| Pcomp_in of expression"in EXPR"
*)and comprehension_clause_binding =
Astlib.Ast_500.Parsetree.comprehension_clause_binding =
{pcomp_cb_pattern : pattern;pcomp_cb_iterator : comprehension_iterator;pcomp_cb_attributes : attributes;}@... PAT (in/=) ...
and comprehension_clause = Astlib.Ast_500.Parsetree.comprehension_clause = | Pcomp_for of comprehension_clause_binding list"for PAT (in/=) ... and PAT (in/=) ... and ..."; must be nonempty
*)| Pcomp_when of expression"when EXPR"
*)and comprehension = Astlib.Ast_500.Parsetree.comprehension = {pcomp_body : expression;The body/generator of the comprehension
*)pcomp_clauses : comprehension_clause list;The clauses of the comprehension; must be nonempty
*)}and comprehension_expression =
Astlib.Ast_500.Parsetree.comprehension_expression =
| Pcomp_list_comprehension of comprehension[BODY ...CLAUSES...]
| Pcomp_array_comprehension of mutable_flag * comprehension[|BODY ...CLAUSES...|] (flag = Mutable) [:BODY ...CLAUSES...:] (flag = Immutable) (only allowed with -extension immutable_arrays)
and value_description = Astlib.Ast_500.Parsetree.value_description = {pval_name : string loc;pval_type : core_type;pval_modalities : modalities;pval_prim : string list;pval_attributes : attributes;... [@@id1] [@@id2]
pval_loc : location;}Values of type value_description represents:
and type_declaration = Astlib.Ast_500.Parsetree.type_declaration = {ptype_name : string loc;ptype_params : (core_type * (variance * injectivity)) list;('a1,...'an) t
ptype_cstrs : (core_type * core_type * location) list;... constraint T1=T1' ... constraint Tn=Tn'
ptype_kind : type_kind;ptype_private : private_flag;for = private ...
ptype_manifest : core_type option;represents = T
ptype_attributes : attributes;... [@@id1] [@@id2]
ptype_jkind_annotation : Astlib.Ast_500.Parsetree.jkind_annotation option;for : jkind
ptype_loc : location;}Here are type declarations and their representation, for various ptype_kind and ptype_manifest values:
type t when type_kind is Ptype_abstract, and manifest is None,type t = T0 when type_kind is Ptype_abstract, and manifest is Some T0,type t = C of T | ... when type_kind is Ptype_variant, and manifest is None,type t = T0 = C of T | ... when type_kind is Ptype_variant, and manifest is Some T0,type t = {l: T; ...} when type_kind is Ptype_record, and manifest is None,type t = T0 = {l : T; ...} when type_kind is Ptype_record, and manifest is Some T0,type t = .. when type_kind is Ptype_open, and manifest is None.and type_kind = Astlib.Ast_500.Parsetree.type_kind = | Ptype_abstract| Ptype_variant of constructor_declaration list| Ptype_record of label_declaration listInvariant: non-empty list
*)| Ptype_record_unboxed_product of label_declaration listInvariant: non-empty list
*)| Ptype_openand label_declaration = Astlib.Ast_500.Parsetree.label_declaration = {pld_name : string loc;pld_mutable : mutable_flag;pld_modalities : modalities;pld_type : core_type;pld_loc : location;pld_attributes : attributes;l : T [@id1] [@id2]
}{ ...; l: T; ... } when pld_mutable is Immutable,{ ...; mutable l: T; ... } when pld_mutable is Mutable.Note: T can be a Ptyp_poly.
and constructor_declaration = Astlib.Ast_500.Parsetree.constructor_declaration =
{pcd_name : string loc;pcd_vars : (string loc * Astlib.Ast_500.Parsetree.jkind_annotation option) list;jkind annotations are C : ('a : kind1) ('a2 : kind2). ...
pcd_args : constructor_arguments;pcd_res : core_type option;pcd_loc : location;pcd_attributes : attributes;C of ... [@id1] [@id2]
}and constructor_argument = Astlib.Ast_500.Parsetree.constructor_argument = {pca_modalities : modalities;pca_type : core_type;pca_loc : location;}and constructor_arguments = Astlib.Ast_500.Parsetree.constructor_arguments = | Pcstr_tuple of constructor_argument list| Pcstr_record of label_declaration listValues of type constructor_declaration represents the constructor arguments of:
C of T1 * ... * Tn when res = None, and args = Pcstr_tuple [T1; ... ; Tn],C: T0 when res = Some T0, and args = Pcstr_tuple [],C: T1 * ... * Tn -> T0 when res = Some T0, and args = Pcstr_tuple [T1; ... ; Tn],C of {...} when res = None, and args = Pcstr_record [...],C: {...} -> T0 when res = Some T0, and args = Pcstr_record [...].and type_extension = Astlib.Ast_500.Parsetree.type_extension = {ptyext_path : longident_loc;ptyext_params : (core_type * (variance * injectivity)) list;ptyext_constructors : extension_constructor list;ptyext_private : private_flag;ptyext_loc : location;ptyext_attributes : attributes;... @@id1 @@id2
}Definition of new extensions constructors for the extensive sum type t (type t += ...).
and extension_constructor = Astlib.Ast_500.Parsetree.extension_constructor = {pext_name : string loc;pext_kind : extension_constructor_kind;pext_loc : location;pext_attributes : attributes;C of ... [@id1] [@id2]
}and type_exception = Astlib.Ast_500.Parsetree.type_exception = {ptyexn_constructor : extension_constructor;ptyexn_loc : location;ptyexn_attributes : attributes;... [@@id1] [@@id2]
}Definition of a new exception (exception E).
and extension_constructor_kind =
Astlib.Ast_500.Parsetree.extension_constructor_kind =
| Pext_decl of (string loc * Astlib.Ast_500.Parsetree.jkind_annotation option)
list
* constructor_arguments
* core_type optionPext_decl(existentials, c_args, t_opt) describes a new extension constructor. It can be:
C of T1 * ... * Tn when:
existentials is [],c_args is [T1; ...; Tn],t_opt is None.C: T0 when
existentials is [],c_args is [],t_opt is Some T0.C: T1 * ... * Tn -> T0 when
existentials is [],c_args is [T1; ...; Tn],t_opt is Some T0.C: ('a : k)... . T1 * ... * Tn -> T0 when
existentials is ['a;...],c_args is [T1; ... ; Tn],t_opt is Some T0.| Pext_rebind of longident_locPext_rebind(D) re-export the constructor D with the new name C
and class_type = Astlib.Ast_500.Parsetree.class_type = {pcty_desc : class_type_desc;pcty_loc : location;pcty_attributes : attributes;... [@id1] [@id2]
}and class_type_desc = Astlib.Ast_500.Parsetree.class_type_desc = | Pcty_constr of longident_loc * core_type listc['a1, ..., 'an] c| Pcty_signature of class_signatureobject ... end
| Pcty_arrow of arg_label * core_type * class_typePcty_arrow(lbl, T, CT) represents:
T -> CT when lbl is Nolabel,~l:T -> CT when lbl is Labelled l,?l:T -> CT when lbl is Optional l.| Pcty_extension of extension%id
| Pcty_open of open_description * class_typelet open M in CT
and class_signature = Astlib.Ast_500.Parsetree.class_signature = {pcsig_self : core_type;pcsig_fields : class_type_field list;}Values of type class_signature represents:
object('selfpat) ... endobject ... end when pcsig_self is Ptyp_anyand class_type_field = Astlib.Ast_500.Parsetree.class_type_field = {pctf_desc : class_type_field_desc;pctf_loc : location;pctf_attributes : attributes;... [@@id1] [@@id2]
}and class_type_field_desc = Astlib.Ast_500.Parsetree.class_type_field_desc = | Pctf_inherit of class_typeinherit CT
| Pctf_val of label loc * mutable_flag * virtual_flag * core_typeval x: T
| Pctf_method of label loc * private_flag * virtual_flag * core_type| Pctf_constraint of core_type * core_typeconstraint T1 = T2
| Pctf_attribute of attribute[@@@id]
| Pctf_extension of extension[%%id]
and 'a class_infos = 'a Astlib.Ast_500.Parsetree.class_infos = {pci_virt : virtual_flag;pci_params : (core_type * (variance * injectivity)) list;pci_name : string loc;pci_expr : 'a;pci_loc : location;pci_attributes : attributes;... [@@id1] [@@id2]
}Values of type class_expr class_infos represents:
class c = ...class ['a1,...,'an] c = ...class virtual c = ...They are also used for "class type" declaration.
and class_description = class_type class_infosand class_type_declaration = class_type class_infosand class_expr = Astlib.Ast_500.Parsetree.class_expr = {pcl_desc : class_expr_desc;pcl_loc : location;pcl_attributes : attributes;... [@id1] [@id2]
}and class_expr_desc = Astlib.Ast_500.Parsetree.class_expr_desc = | Pcl_constr of longident_loc * core_type listc and ['a1, ..., 'an] c
| Pcl_structure of class_structureobject ... end
| Pcl_fun of arg_label * expression option * pattern * class_exprPcl_fun(lbl, exp0, P, CE) represents:
fun P -> CE when lbl is Nolabel and exp0 is None,fun ~l:P -> CE when lbl is Labelled l and exp0 is None,fun ?l:P -> CE when lbl is Optional l and exp0 is None,fun ?l:(P = E0) -> CE when lbl is Optional l and exp0 is Some E0.| Pcl_apply of class_expr * (arg_label * expression) listPcl_apply(CE, [(l1,E1) ; ... ; (ln,En)]) represents CE ~l1:E1 ... ~ln:En. li can be empty (non labeled argument) or start with ? (optional argument).
Invariant: n > 0
| Pcl_let of rec_flag * value_binding list * class_exprPcl_let(rec, [(P1, E1); ... ; (Pn, En)], CE) represents:
let P1 = E1 and ... and Pn = EN in CE when rec is Nonrecursive,let rec P1 = E1 and ... and Pn = EN in CE when rec is Recursive.| Pcl_constraint of class_expr * class_type(CE : CT)
| Pcl_extension of extension[%id]
| Pcl_open of open_description * class_exprlet open M in CE
and class_structure = Astlib.Ast_500.Parsetree.class_structure = {pcstr_self : pattern;pcstr_fields : class_field list;}Values of type class_structure represents:
object(selfpat) ... endobject ... end when pcstr_self is Ppat_anyand class_field = Astlib.Ast_500.Parsetree.class_field = {pcf_desc : class_field_desc;pcf_loc : location;pcf_attributes : attributes;... [@@id1] [@@id2]
}and class_field_desc = Astlib.Ast_500.Parsetree.class_field_desc = | Pcf_inherit of override_flag * class_expr * string loc option| Pcf_val of label loc * mutable_flag * class_field_kindPcf_val(x,flag, kind) represents:
val x = E when flag is Immutable and kind is Cfk_concrete(Fresh, E)val virtual x: T when flag is Immutable and kind is Cfk_virtual(T)val mutable x = E when flag is Mutable and kind is Cfk_concrete(Fresh, E)val mutable virtual x: T when flag is Mutable and kind is Cfk_virtual(T)| Pcf_method of label loc * private_flag * class_field_kind| Pcf_constraint of core_type * core_typeconstraint T1 = T2
| Pcf_initializer of expressioninitializer E
| Pcf_attribute of attribute[@@@id]
| Pcf_extension of extension[%%id]
and class_field_kind = Astlib.Ast_500.Parsetree.class_field_kind = | Cfk_virtual of core_type| Cfk_concrete of override_flag * expressionand class_declaration = class_expr class_infosand module_type = Astlib.Ast_500.Parsetree.module_type = {pmty_desc : module_type_desc;pmty_loc : location;pmty_attributes : attributes;... [@id1] [@id2]
}and module_type_desc = Astlib.Ast_500.Parsetree.module_type_desc = | Pmty_ident of longident_locPmty_ident(S) represents S
| Pmty_signature of signaturesig ... end
| Pmty_functor of functor_parameter * module_type * modesfunctor(X : MT1) -> MT2
| Pmty_with of module_type * with_constraint listMT with ...
| Pmty_typeof of module_exprmodule type of ME
| Pmty_extension of extension[%id]
| Pmty_alias of longident_loc(module M)
| Pmty_strengthen of module_type * longident_locMT with S
and functor_parameter = Astlib.Ast_500.Parsetree.functor_parameter = | Unit()
| Named of string option loc * module_type * modesNamed(name, MT) represents:
(X : MT) when name is Some X,(_ : MT) when name is Noneand signature = Astlib.Ast_500.Parsetree.signature = {psg_modalities : modalities;psg_items : signature_items;psg_loc : location;}and signature_items = signature_item listand signature_item = Astlib.Ast_500.Parsetree.signature_item = {psig_desc : signature_item_desc;psig_loc : location;}and signature_item_desc = Astlib.Ast_500.Parsetree.signature_item_desc = | Psig_value of value_descriptionval x: Texternal x: T = "s1" ... "sn"| Psig_type of rec_flag * type_declaration listtype t1 = ... and ... and tn = ...
| Psig_typesubst of type_declaration listtype t1 := ... and ... and tn := ...
| Psig_typext of type_extensiontype t1 += ...
| Psig_exception of type_exceptionexception C of T
| Psig_module of module_declarationmodule X = M and module X : MT
| Psig_modsubst of module_substitutionmodule X := M
| Psig_recmodule of module_declaration listmodule rec X1 : MT1 and ... and Xn : MTn
| Psig_modtype of module_type_declarationmodule type S = MT and module type S
| Psig_modtypesubst of module_type_declarationmodule type S := ...
| Psig_open of open_descriptionopen X
| Psig_include of include_description * modalitiesinclude MT
| Psig_class of class_description listclass c1 : ... and ... and cn : ...
| Psig_class_type of class_type_declaration listclass type ct1 = ... and ... and ctn = ...
| Psig_attribute of attribute[@@@id]
| Psig_extension of extension * attributes[%%id]
| Psig_kind_abbrev of string loc * Astlib.Ast_500.Parsetree.jkind_annotationkind_abbrev_ name = k
and module_declaration = Astlib.Ast_500.Parsetree.module_declaration = {pmd_name : string option loc;pmd_type : module_type;pmd_modalities : modalities;pmd_attributes : attributes;... [@@id1] [@@id2]
pmd_loc : location;}Values of type module_declaration represents S : MT
and module_substitution = Astlib.Ast_500.Parsetree.module_substitution = {pms_name : string loc;pms_manifest : longident_loc;pms_attributes : attributes;... [@@id1] [@@id2]
pms_loc : location;}Values of type module_substitution represents S := M
and module_type_declaration = Astlib.Ast_500.Parsetree.module_type_declaration =
{pmtd_name : string loc;pmtd_type : module_type option;pmtd_attributes : attributes;... [@@id1] [@@id2]
pmtd_loc : location;}Values of type module_type_declaration represents:
S = MT,S for abstract module type declaration, when pmtd_type is None.and 'a open_infos = 'a Astlib.Ast_500.Parsetree.open_infos = {popen_expr : 'a;popen_override : override_flag;popen_loc : location;popen_attributes : attributes;}Values of type 'a open_infos represents:
open! X when popen_override is Override (silences the "used identifier shadowing" warning)open X when popen_override is Freshand open_description = longident_loc open_infosValues of type open_description represents:
open M.Nopen M(N).Oand open_declaration = module_expr open_infosValues of type open_declaration represents:
open M.Nopen M(N).Oopen struct ... endand 'a include_infos = 'a Astlib.Ast_500.Parsetree.include_infos = {pincl_kind : include_kind;pincl_mod : 'a;pincl_loc : location;pincl_attributes : attributes;}and include_description = module_type include_infosValues of type include_description represents include MT
and include_declaration = module_expr include_infosValues of type include_declaration represents include ME
and with_constraint = Astlib.Ast_500.Parsetree.with_constraint = | Pwith_type of longident_loc * type_declarationwith type X.t = ...
Note: the last component of the longident must match the name of the type_declaration.
*)| Pwith_module of longident_loc * longident_locwith module X.Y = Z
| Pwith_modtype of longident_loc * module_typewith module type X.Y = Z
| Pwith_modtypesubst of longident_loc * module_typewith module type X.Y := sig end
| Pwith_typesubst of longident_loc * type_declarationwith type X.t := ..., same format as [Pwith_type]
| Pwith_modsubst of longident_loc * longident_locwith module X.Y := Z
and module_expr = Astlib.Ast_500.Parsetree.module_expr = {pmod_desc : module_expr_desc;pmod_loc : location;pmod_attributes : attributes;... [@id1] [@id2]
}and module_expr_desc = Astlib.Ast_500.Parsetree.module_expr_desc = | Pmod_ident of longident_locX
| Pmod_structure of structurestruct ... end
| Pmod_functor of functor_parameter * module_exprfunctor(X : MT1) -> ME
| Pmod_apply of module_expr * module_exprME1(ME2)
| Pmod_constraint of module_expr * module_type option * modes(ME : MT)
| Pmod_unpack of expression(val E)
| Pmod_extension of extension[%id]
| Pmod_instance of module_instanceFoo(Param1)(Arg1(Param2)(Arg2)) [@jane.non_erasable.instances]
and module_instance = Astlib.Ast_500.Parsetree.module_instance = {pmod_instance_head : string;pmod_instance_args : (string * module_instance) list;}M(P1)(MI1)...(Pn)(MIn)
and structure = structure_item listand structure_item = Astlib.Ast_500.Parsetree.structure_item = {pstr_desc : structure_item_desc;pstr_loc : location;}and structure_item_desc = Astlib.Ast_500.Parsetree.structure_item_desc = | Pstr_eval of expression * attributesE
| Pstr_value of rec_flag * value_binding listPstr_value(rec, [(P1, E1 ; ... ; (Pn, En))]) represents:
let P1 = E1 and ... and Pn = EN when rec is Nonrecursive,let rec P1 = E1 and ... and Pn = EN when rec is Recursive.| Pstr_primitive of value_descriptionval x: Texternal x: T = "s1" ... "sn" | Pstr_type of rec_flag * type_declaration listtype t1 = ... and ... and tn = ...
| Pstr_typext of type_extensiontype t1 += ...
| Pstr_exception of type_exceptionexception C of Texception C = M.X| Pstr_module of module_bindingmodule X = ME
| Pstr_recmodule of module_binding listmodule rec X1 = ME1 and ... and Xn = MEn
| Pstr_modtype of module_type_declarationmodule type S = MT
| Pstr_open of open_declarationopen X
| Pstr_class of class_declaration listclass c1 = ... and ... and cn = ...
| Pstr_class_type of class_type_declaration listclass type ct1 = ... and ... and ctn = ...
| Pstr_include of include_declarationinclude ME
| Pstr_attribute of attribute[@@@id]
| Pstr_extension of extension * attributes[%%id]
| Pstr_kind_abbrev of string loc * Astlib.Ast_500.Parsetree.jkind_annotationkind_abbrev_ name = k
and value_binding = Astlib.Ast_500.Parsetree.value_binding = {pvb_pat : pattern;pvb_expr : expression;pvb_modes : modes;pvb_attributes : attributes;pvb_loc : location;}and module_binding = Astlib.Ast_500.Parsetree.module_binding = {pmb_name : string option loc;pmb_expr : module_expr;pmb_attributes : attributes;pmb_loc : location;}Values of type module_binding represents module X = ME
and jkind_annotation_desc = Astlib.Ast_500.Parsetree.jkind_annotation_desc = | Pjk_default| Pjk_abbreviation of string| Pjk_mod of Astlib.Ast_500.Parsetree.jkind_annotation * modes| Pjk_with of Astlib.Ast_500.Parsetree.jkind_annotation * core_type * modalities| Pjk_kind_of of core_type| Pjk_product of Astlib.Ast_500.Parsetree.jkind_annotation listand toplevel_phrase = Astlib.Ast_500.Parsetree.toplevel_phrase = | Ptop_def of structure| Ptop_dir of toplevel_directive#use, #load ...
and toplevel_directive = Astlib.Ast_500.Parsetree.toplevel_directive = {pdir_name : string loc;pdir_arg : directive_argument option;pdir_loc : location;}and directive_argument = Astlib.Ast_500.Parsetree.directive_argument = {pdira_desc : directive_argument_desc;pdira_loc : location;}and directive_argument_desc = Astlib.Ast_500.Parsetree.directive_argument_desc =
| Pdir_string of string| Pdir_int of string * char option| Pdir_ident of longident| Pdir_bool of booland cases = case listclass virtual map : object ... endclass virtual iter : object ... endclass virtual 'acc fold : object ... endclass virtual 'acc fold_map : object ... endclass virtual 'ctx map_with_context : object ... endclass virtual 'res lift : object ... endclass virtual ['ctx, 'res] lift_map_with_context : object ... endmodule Ast_pattern : sig ... endmodule Attribute = Ppxlib.Attributemodule Context_free = Ppxlib.Context_freemodule Driver = Ppxlib.Drivermodule Extension = Ppxlib.Extensionmodule Loc = Ppxlib.Locmodule Location : sig ... endinclude sig ... endmodule Ast_traverse = Ppxlib_jane.Ast_traversetype jkind_annotation = Ppxlib_jane.Shim.jkind_annotationmodule Ast_builder : sig ... endinclude sig ... endmodule Sexp = Sexplib0.Sexpinclude module type of struct include Sexplib0.Sexp_conv endval default_string_of_float : (float -> string) Basement.Dynamic.t @@ portabledefault_string_of_float reference to the default function used to convert floats to strings.
Initially set to fun n -> sprintf "%.20G" n.
val write_old_option_format : bool Basement.Dynamic.t @@ portablewrite_old_option_format reference for the default option format used to write option values. If set to true, the old-style option format will be used, the new-style one otherwise.
Initially set to true.
val read_old_option_format : bool Basement.Dynamic.t @@ portableread_old_option_format reference for the default option format used to read option values. Of_sexp_error will be raised with old-style option values if this reference is set to false. Reading new-style option values is always supported. Using a global reference instead of changing the converter calling conventions is the only way to avoid breaking old code with the standard macros.
Initially set to true.
We re-export a tail recursive map function, because some modules override the standard library functions (e.g. StdLabels) which wrecks havoc with the camlp4 extension.
val list_map__stack :
('a @ local -> 'b @ local) @ local ->
('a list @ local ->
'b list @ local) @ local @@ portableAs list_map, but operating over locally-allocated values.
val sexp_of_unit : unit -> Sexplib0.Sexp.t @@ portablesexp_of_unit () converts a value of type unit to an S-expression.
val sexp_of_unit__stack : unit @ local -> Sexplib0.Sexp.t @ local @@ portableAs sexp_of_unit, but returning a locally-allocated sexp.
val sexp_of_bool : bool -> Sexplib0.Sexp.t @@ portablesexp_of_bool b converts the value x of type bool to an S-expression.
val sexp_of_bool__stack : bool @ local -> Sexplib0.Sexp.t @ local @@ portableAs sexp_of_bool, but returning a locally-allocated sexp.
val sexp_of_string : string -> Sexplib0.Sexp.t @@ portablesexp_of_string str converts the value str of type string to an S-expression.
val sexp_of_string__stack :
string @ local ->
Sexplib0.Sexp.t @ local @@ portableAs sexp_of_string, but returning a locally-allocated sexp.
val sexp_of_bytes : bytes -> Sexplib0.Sexp.t @@ portablesexp_of_bytes str converts the value str of type bytes to an S-expression.
val sexp_of_bytes__stack : bytes @ local -> Sexplib0.Sexp.t @ local @@ portableAs sexp_of_bytes, but returning a locally-allocated sexp.
val sexp_of_char : char -> Sexplib0.Sexp.t @@ portablesexp_of_char c converts the value c of type char to an S-expression.
val sexp_of_char__stack : char @ local -> Sexplib0.Sexp.t @ local @@ portableAs sexp_of_char, but returning a locally-allocated sexp. Currently, the sexp will contain a one-character string which is heap-allocated.
val sexp_of_int : int -> Sexplib0.Sexp.t @@ portablesexp_of_int n converts the value n of type int to an S-expression.
val sexp_of_int__stack : int @ local -> Sexplib0.Sexp.t @ local @@ portableAs sexp_of_int, but returning a locally-allocated sexp. Currently, the sexp will contain a formatted string which is heap-allocated.
val sexp_of_float : float -> Sexplib0.Sexp.t @@ portablesexp_of_float n converts the value n of type float to an S-expression.
val sexp_of_float__stack : float @ local -> Sexplib0.Sexp.t @ local @@ portableAs sexp_of_float, but returning a locally-allocated sexp. Currently, the float will be copied to the heap, and the sexp will contain a formatted string which is heap-allocated.
val sexp_of_int32 : int32 -> Sexplib0.Sexp.t @@ portablesexp_of_int32 n converts the value n of type int32 to an S-expression.
val sexp_of_int32__stack : int32 @ local -> Sexplib0.Sexp.t @ local @@ portableAs sexp_of_int32, but returning a locally-allocated sexp. Currently, the sexp will contain a formatted string which is heap-allocated.
val sexp_of_int64 : int64 -> Sexplib0.Sexp.t @@ portablesexp_of_int64 n converts the value n of type int64 to an S-expression.
val sexp_of_int64__stack : int64 @ local -> Sexplib0.Sexp.t @ local @@ portableAs sexp_of_int64, but returning a locally-allocated sexp. Currently, the sexp will contain a formatted string which is heap-allocated.
val sexp_of_nativeint : nativeint -> Sexplib0.Sexp.t @@ portablesexp_of_nativeint n converts the value n of type nativeint to an S-expression.
val sexp_of_nativeint__stack :
nativeint @ local ->
Sexplib0.Sexp.t @ local @@ portableAs sexp_of_nativeint, but returning a locally-allocated sexp. Currently, the sexp will contain a formatted string which is heap-allocated.
val sexp_of_ref :
'a. ('a -> Sexplib0.Sexp.t) ->
'a ref ->
Sexplib0.Sexp.t @@ portablesexp_of_ref conv r converts the value r of type 'a ref to an S-expression. Uses conv to convert values of type 'a to an S-expression.
val sexp_of_ref__stack :
'a. ('a @ local -> Sexplib0.Sexp.t @ local) ->
'a ref @ local ->
Sexplib0.Sexp.t @ local @@ portableAs sexp_of_ref, but returning a locally-allocated sexp.
val sexp_of_lazy_t :
'a. ('a -> Sexplib0.Sexp.t) ->
'a lazy_t ->
Sexplib0.Sexp.t @@ portablesexp_of_lazy_t conv l converts the value l of type 'a lazy_t to an S-expression. Uses conv to convert values of type 'a to an S-expression.
val sexp_of_lazy_t__stack :
'a. ('a @ local -> Sexplib0.Sexp.t @ local) ->
'a lazy_t @ local ->
Sexplib0.Sexp.t @ local @@ portableAs sexp_of_lazy_t, but returning a locally-allocated sexp.
val sexp_of_option :
'a. ('a -> Sexplib0.Sexp.t) ->
'a option ->
Sexplib0.Sexp.t @@ portablesexp_of_option conv opt converts the value opt of type 'a option to an S-expression. Uses conv to convert values of type 'a to an S-expression.
val sexp_of_option__stack :
'a. ('a @ local -> Sexplib0.Sexp.t @ local) ->
'a option @ local ->
Sexplib0.Sexp.t @ local @@ portableAs sexp_of_option, but returning a locally-allocated sexp.
val sexp_of_or_null :
'a. ('a -> Sexplib0.Sexp.t) ->
'a Basement.Or_null_shim.t ->
Sexplib0.Sexp.t @@ portablesexp_of_or_null conv orn converts the value orn of type 'a or_null to an S-expression. Uses conv to convert values of type 'a to an S-expression.
val sexp_of_or_null__stack :
'a. ('a @ local -> Sexplib0.Sexp.t @ local) ->
'a Basement.Or_null_shim.t @ local ->
Sexplib0.Sexp.t @ local @@ portableAs sexp_of_or_null, but returning a locally-allocated sexp.
val sexp_of_pair :
'a 'b. ('a -> Sexplib0.Sexp.t) ->
('b -> Sexplib0.Sexp.t) ->
('a * 'b) ->
Sexplib0.Sexp.t @@ portablesexp_of_pair conv1 conv2 pair converts a pair to an S-expression. It uses its first argument to convert the first element of the pair, and its second argument to convert the second element of the pair.
val sexp_of_triple :
'a 'b 'c. ('a -> Sexplib0.Sexp.t) ->
('b -> Sexplib0.Sexp.t) ->
('c -> Sexplib0.Sexp.t) ->
('a * 'b * 'c) ->
Sexplib0.Sexp.t @@ portablesexp_of_triple conv1 conv2 conv3 triple converts a triple to an S-expression using conv1, conv2, and conv3 to convert its elements.
val sexp_of_list :
'a. ('a -> Sexplib0.Sexp.t) ->
'a list ->
Sexplib0.Sexp.t @@ portablesexp_of_list conv lst converts the value lst of type 'a list to an S-expression. Uses conv to convert values of type 'a to an S-expression.
val sexp_of_list__stack :
'a. ('a @ local -> Sexplib0.Sexp.t @ local) ->
'a list @ local ->
Sexplib0.Sexp.t @ local @@ portableAs sexp_of_list, but returning a locally-allocated sexp.
val sexp_of_array :
'a. ('a -> Sexplib0.Sexp.t) ->
'a array ->
Sexplib0.Sexp.t @@ portablesexp_of_array conv ar converts the value ar of type 'a array to an S-expression. Uses conv to convert values of type 'a to an S-expression.
val sexp_of_array__stack :
'a. ('a @ local -> Sexplib0.Sexp.t @ local) ->
'a array @ local ->
Sexplib0.Sexp.t @ local @@ portableAs sexp_of_array, but returning a locally-allocated sexp.
val sexp_of_hashtbl :
'a 'b. ('a -> Sexplib0.Sexp.t) ->
('b -> Sexplib0.Sexp.t) ->
('a, 'b) Hashtbl.t ->
Sexplib0.Sexp.t @@ portablesexp_of_hashtbl conv_key conv_value htbl converts the value htbl of type ('a, 'b) Hashtbl.t to an S-expression. Uses conv_key to convert the hashtable keys of type 'a, and conv_value to convert hashtable values of type 'b to S-expressions.
val sexp_of_opaque : 'a. 'a @ local contended -> Sexplib0.Sexp.t @@ portablesexp_of_opaque x converts the value x of opaque type to an S-expression. This means the user need not provide converters, but the result cannot be interpreted.
val sexp_of_fun : ('a -> 'b) @ local -> Sexplib0.Sexp.t @@ portablesexp_of_fun f converts the value f of function type to a dummy S-expression. Functions cannot be serialized as S-expressions, but at least a placeholder can be generated for pretty-printing.
exception Of_sexp_error of exn * Sexplib0.Sexp.tOf_sexp_error (exn, sexp) the exception raised when an S-expression could not be successfully converted to an OCaml-value.
val record_check_extra_fields : bool Basement.Dynamic.t @@ portablerecord_check_extra_fields checks for extra (= unknown) fields in record S-expressions.
val of_sexp_error : string -> Sexplib0.Sexp.t -> 'a @@ portableof_sexp_error reason sexp
val of_sexp_error_exn : exn -> Sexplib0.Sexp.t -> 'a @@ portableof_sexp_error exc sexp
val unit_of_sexp : Sexplib0.Sexp.t -> unit @@ portableunit_of_sexp sexp converts S-expression sexp to a value of type unit.
val bool_of_sexp : Sexplib0.Sexp.t -> bool @@ portablebool_of_sexp sexp converts S-expression sexp to a value of type bool.
val string_of_sexp : Sexplib0.Sexp.t -> string @@ portablestring_of_sexp sexp converts S-expression sexp to a value of type string.
val bytes_of_sexp : Sexplib0.Sexp.t -> bytes @@ portablebytes_of_sexp sexp converts S-expression sexp to a value of type bytes.
val char_of_sexp : Sexplib0.Sexp.t -> char @@ portablechar_of_sexp sexp converts S-expression sexp to a value of type char.
val int_of_sexp : Sexplib0.Sexp.t -> int @@ portableint_of_sexp sexp converts S-expression sexp to a value of type int.
val float_of_sexp : Sexplib0.Sexp.t -> float @@ portablefloat_of_sexp sexp converts S-expression sexp to a value of type float.
val int32_of_sexp : Sexplib0.Sexp.t -> int32 @@ portableint32_of_sexp sexp converts S-expression sexp to a value of type int32.
val int64_of_sexp : Sexplib0.Sexp.t -> int64 @@ portableint64_of_sexp sexp converts S-expression sexp to a value of type int64.
val nativeint_of_sexp : Sexplib0.Sexp.t -> nativeint @@ portablenativeint_of_sexp sexp converts S-expression sexp to a value of type nativeint.
val ref_of_sexp :
'a. (Sexplib0.Sexp.t -> 'a) ->
Sexplib0.Sexp.t ->
'a ref @@ portableref_of_sexp conv sexp converts S-expression sexp to a value of type 'a ref using conversion function conv, which converts an S-expression to a value of type 'a.
val lazy_t_of_sexp :
'a. (Sexplib0.Sexp.t -> 'a) ->
Sexplib0.Sexp.t ->
'a lazy_t @@ portablelazy_t_of_sexp conv sexp converts S-expression sexp to a value of type 'a lazy_t using conversion function conv, which converts an S-expression to a value of type 'a.
val option_of_sexp :
'a. (Sexplib0.Sexp.t -> 'a) ->
Sexplib0.Sexp.t ->
'a option @@ portableoption_of_sexp conv sexp converts S-expression sexp to a value of type 'a option using conversion function conv, which converts an S-expression to a value of type 'a.
val or_null_of_sexp :
'a. (Sexplib0.Sexp.t -> 'a) ->
Sexplib0.Sexp.t ->
'a Basement.Or_null_shim.t @@ portableoption_of_sexp conv sexp converts S-expression sexp to a value of type 'a or_null using conversion function conv, which converts an S-expression to a value of type 'a.
val pair_of_sexp :
'a 'b. (Sexplib0.Sexp.t -> 'a) ->
(Sexplib0.Sexp.t -> 'b) ->
Sexplib0.Sexp.t ->
'a * 'b @@ portablepair_of_sexp conv1 conv2 sexp converts S-expression sexp to a pair of type 'a * 'b using conversion functions conv1 and conv2, which convert S-expressions to values of type 'a and 'b respectively.
val triple_of_sexp :
'a 'b 'c. (Sexplib0.Sexp.t -> 'a) ->
(Sexplib0.Sexp.t -> 'b) ->
(Sexplib0.Sexp.t -> 'c) ->
Sexplib0.Sexp.t ->
'a * 'b * 'c @@ portabletriple_of_sexp conv1 conv2 conv3 sexp converts S-expression sexp to a triple of type 'a * 'b * 'c using conversion functions conv1, conv2, and conv3, which convert S-expressions to values of type 'a, 'b, and 'c respectively.
val list_of_sexp :
'a. (Sexplib0.Sexp.t -> 'a) ->
Sexplib0.Sexp.t ->
'a list @@ portablelist_of_sexp conv sexp converts S-expression sexp to a value of type 'a list using conversion function conv, which converts an S-expression to a value of type 'a.
val array_of_sexp :
'a. (Sexplib0.Sexp.t -> 'a) ->
Sexplib0.Sexp.t ->
'a array @@ portablearray_of_sexp conv sexp converts S-expression sexp to a value of type 'a array using conversion function conv, which converts an S-expression to a value of type 'a.
val hashtbl_of_sexp :
'a 'b. (Sexplib0.Sexp.t -> 'a) ->
(Sexplib0.Sexp.t -> 'b) ->
Sexplib0.Sexp.t ->
('a, 'b) Hashtbl.t @@ portablehashtbl_of_sexp conv_key conv_value sexp converts S-expression sexp to a value of type ('a, 'b) Hashtbl.t using conversion function conv_key, which converts an S-expression to hashtable key of type 'a, and function conv_value, which converts an S-expression to hashtable value of type 'b.
val opaque_of_sexp : Sexplib0.Sexp.t -> 'a @@ portableopaque_of_sexp sexp
val fun_of_sexp : Sexplib0.Sexp.t -> 'a @@ portablefun_of_sexp sexp
Sexp Grammars
val sexp_grammar_with_tags :
Sexplib0.Sexp_grammar.grammar ->
tags:(string * Sexplib0.Sexp.t) list ->
Sexplib0.Sexp_grammar.grammar @@ portableval sexp_grammar_with_tag_list :
'a Sexplib0.Sexp_grammar.with_tag_list ->
tags:(string * Sexplib0.Sexp.t) list ->
'a Sexplib0.Sexp_grammar.with_tag_list @@ portableSexp grammar definitions.
val unit_sexp_grammar : unit Sexplib0.Sexp_grammar.t @@ portableval bool_sexp_grammar : bool Sexplib0.Sexp_grammar.t @@ portableval string_sexp_grammar : string Sexplib0.Sexp_grammar.t @@ portableval bytes_sexp_grammar : bytes Sexplib0.Sexp_grammar.t @@ portableval char_sexp_grammar : char Sexplib0.Sexp_grammar.t @@ portableval int_sexp_grammar : int Sexplib0.Sexp_grammar.t @@ portableval float_sexp_grammar : float Sexplib0.Sexp_grammar.t @@ portableval int32_sexp_grammar : int32 Sexplib0.Sexp_grammar.t @@ portableval int64_sexp_grammar : int64 Sexplib0.Sexp_grammar.t @@ portableval nativeint_sexp_grammar : nativeint Sexplib0.Sexp_grammar.t @@ portableval sexp_t_sexp_grammar : Sexplib0.Sexp.t Sexplib0.Sexp_grammar.t @@ portableval ref_sexp_grammar :
'a. 'a Sexplib0.Sexp_grammar.t ->
'a ref Sexplib0.Sexp_grammar.t @@ portableval lazy_t_sexp_grammar :
'a Sexplib0.Sexp_grammar.t ->
'a lazy_t Sexplib0.Sexp_grammar.t @@ portableval option_sexp_grammar :
'a. 'a Sexplib0.Sexp_grammar.t ->
'a option Sexplib0.Sexp_grammar.t @@ portableval list_sexp_grammar :
'a. 'a Sexplib0.Sexp_grammar.t ->
'a list Sexplib0.Sexp_grammar.t @@ portableval array_sexp_grammar :
'a. 'a Sexplib0.Sexp_grammar.t ->
'a array Sexplib0.Sexp_grammar.t @@ portableval opaque_sexp_grammar : 'a. 'a Sexplib0.Sexp_grammar.t @@ portableval fun_sexp_grammar : 'a Sexplib0.Sexp_grammar.t @@ portableException converters
val sexp_of_exn : exn -> Sexplib0.Sexp.t @@ portablesexp_of_exn exc converts exception exc to an S-expression. If no suitable converter is found, the standard converter in Printexc will be used to generate an atomic S-expression.
Converts an exception to a string via sexp, falling back to Printexc.to_string if no sexp conversion is registered for this exception.
This is different from Printexc.to_string in that it additionally uses the sexp converters registered with ~printexc:false. Another difference is that the behavior of Printexc can be overridden with Printexc.register, but here we always try sexp conversion first.
val sexp_of_exn_opt : exn -> Sexplib0.Sexp.t option @@ portablesexp_of_exn_opt exc converts exception exc to Some sexp. If no suitable converter is found, None is returned instead.
module Exn_converter = Sexplib0.Sexp_conv.Exn_convertermodule Result : sig ... end