package ppxlib
- Value description
- Value binding
- Type extension
- Type exception
- Type declaration
- Toplevel directive
- Structure item
- Signature item
- Row field
- Position
- Pattern
- Object field
- Module type declaration
- Module type
- Module substitution
- Module expr
- Module declaration
- Module binding
- Location
- Letop
- Label declaration
- Function param
- Extension constructor
- Expression
- Directive argument
- Core type
- Constructor declaration
- Class type field
- Class type
- Class structure
- Class signature
- Class field
- Class expr
- Case
- Binding op
- Attribute
- 'a open infos
- 'a include infos
- 'a class infos
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=5aba1bce14c53108614130110c843d004bf93bd2cf3a0778fd7086b85390a434
sha512=1e3e8fee42fe74bffc178dbcbb2db8ec38dd23e71f6fed3c4c92618cf93892f5847787e6e9abb322f5c85d29a76afde28ce840b42e10fedc14cd82ba578ad06a
doc/ppxlib/Ppxlib/Ast_builder/Default/index.html
Module Ast_builder.DefaultSource
Helpers taking a ~loc argument. This module is meant to be opened or aliased.
Value description
val value_description :
loc:Location.t ->
name:string Astlib.Location.loc ->
type_:Astlib.Ast_502.Parsetree.core_type ->
prim:string list ->
Astlib.Ast_502.Parsetree.value_descriptionvalue_description constructs an Ast.value_description
Example OCaml
Values of type value_description represents:
Value binding
Type extension
val type_extension :
loc:Location.t ->
path:Astlib.Longident.t Astlib.Location.loc ->
params:
(Astlib.Ast_502.Parsetree.core_type
* (Astlib.Ast_502.Asttypes.variance * Astlib.Ast_502.Asttypes.injectivity))
list ->
constructors:Astlib.Ast_502.Parsetree.extension_constructor list ->
private_:Astlib.Ast_502.Asttypes.private_flag ->
Astlib.Ast_502.Parsetree.type_extensiontype_extension constructs an Ast.type_extension
Example OCaml
Definition of new extensions constructors for the extensive sum type t (type t += ...).
Type exception
val type_exception :
loc:Location.t ->
Astlib.Ast_502.Parsetree.extension_constructor ->
Astlib.Ast_502.Parsetree.type_exceptiontype_exception constructs an Ast.type_exception
Example OCaml
Definition of a new exception (exception E).
Type declaration
val type_declaration :
loc:Location.t ->
name:string Astlib.Location.loc ->
params:
(Astlib.Ast_502.Parsetree.core_type
* (Astlib.Ast_502.Asttypes.variance * Astlib.Ast_502.Asttypes.injectivity))
list ->
cstrs:
(Astlib.Ast_502.Parsetree.core_type
* Astlib.Ast_502.Parsetree.core_type
* Astlib.Location.t)
list ->
kind:Astlib.Ast_502.Parsetree.type_kind ->
private_:Astlib.Ast_502.Asttypes.private_flag ->
manifest:Astlib.Ast_502.Parsetree.core_type option ->
Astlib.Ast_502.Parsetree.type_declarationtype_declaration constructs an Ast.type_declaration
Example OCaml
Here are type declarations and their representation, for various ptype_kind and ptype_manifest values:
type twhentype_kindisPtype_abstract, andmanifestisNone,type t = T0whentype_kindisPtype_abstract, andmanifestisSome T0,type t = C of T | ...whentype_kindisPtype_variant, andmanifestisNone,type t = T0 = C of T | ...whentype_kindisPtype_variant, andmanifestisSome T0,type t = {l: T; ...}whentype_kindisPtype_record, andmanifestisNone,type t = T0 = {l : T; ...}whentype_kindisPtype_record, andmanifestisSome T0,type t = ..whentype_kindisPtype_open, andmanifestisNone.
Toplevel directive
val toplevel_directive :
loc:Location.t ->
name:string Astlib.Location.loc ->
arg:Astlib.Ast_502.Parsetree.directive_argument option ->
Astlib.Ast_502.Parsetree.toplevel_directivetoplevel_directive constructs an Ast.toplevel_directive
Structure item
val pstr_extension :
loc:Location.t ->
(string Astlib.Location.loc * Astlib.Ast_502.Parsetree.payload) ->
Astlib.Ast_502.Parsetree.attribute list ->
Astlib.Ast_502.Parsetree.structure_itemval pstr_attribute :
loc:Location.t ->
Astlib.Ast_502.Parsetree.attribute ->
Astlib.Ast_502.Parsetree.structure_itemval pstr_class_type :
loc:Location.t ->
Astlib.Ast_502.Parsetree.class_type Astlib.Ast_502.Parsetree.class_infos list ->
Astlib.Ast_502.Parsetree.structure_itempstr_class_type constructs an Ast.structure_item_desc.Pstr_class_type
Example OCaml
class type ct1 = ... and ... and ctn = ...
val pstr_class :
loc:Location.t ->
Astlib.Ast_502.Parsetree.class_expr Astlib.Ast_502.Parsetree.class_infos list ->
Astlib.Ast_502.Parsetree.structure_itempstr_class constructs an Ast.structure_item_desc.Pstr_class
Example OCaml
class c1 = ... and ... and cn = ...
val pstr_modtype :
loc:Location.t ->
Astlib.Ast_502.Parsetree.module_type_declaration ->
Astlib.Ast_502.Parsetree.structure_itemval pstr_recmodule :
loc:Location.t ->
Astlib.Ast_502.Parsetree.module_binding list ->
Astlib.Ast_502.Parsetree.structure_itempstr_recmodule constructs an Ast.structure_item_desc.Pstr_recmodule
Example OCaml
module rec X1 = ME1 and ... and Xn = MEn
val pstr_module :
loc:Location.t ->
Astlib.Ast_502.Parsetree.module_binding ->
Astlib.Ast_502.Parsetree.structure_itemval pstr_exception :
loc:Location.t ->
Astlib.Ast_502.Parsetree.type_exception ->
Astlib.Ast_502.Parsetree.structure_itempstr_exception constructs an Ast.structure_item_desc.Pstr_exception
Example OCaml
exception C of Texception C = M.X
val pstr_typext :
loc:Location.t ->
Astlib.Ast_502.Parsetree.type_extension ->
Astlib.Ast_502.Parsetree.structure_itemval pstr_type :
loc:Location.t ->
Astlib.Ast_502.Asttypes.rec_flag ->
Astlib.Ast_502.Parsetree.type_declaration list ->
Astlib.Ast_502.Parsetree.structure_itempstr_type constructs an Ast.structure_item_desc.Pstr_type
Example OCaml
type t1 = ... and ... and tn = ...
val pstr_primitive :
loc:Location.t ->
Astlib.Ast_502.Parsetree.value_description ->
Astlib.Ast_502.Parsetree.structure_itempstr_primitive constructs an Ast.structure_item_desc.Pstr_primitive
Example OCaml
val x: Texternal x: T = "s1" ... "sn"
val pstr_value :
loc:Location.t ->
Astlib.Ast_502.Asttypes.rec_flag ->
Astlib.Ast_502.Parsetree.value_binding list ->
Astlib.Ast_502.Parsetree.structure_itempstr_value constructs an Ast.structure_item_desc.Pstr_value
Example OCaml
Pstr_value(rec, [(P1, E1 ; ... ; (Pn, En))]) represents:
let P1 = E1 and ... and Pn = ENwhenrecisNonrecursive,let rec P1 = E1 and ... and Pn = ENwhenrecisRecursive.
val pstr_eval :
loc:Location.t ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.attribute list ->
Astlib.Ast_502.Parsetree.structure_itemSignature item
val psig_extension :
loc:Location.t ->
(string Astlib.Location.loc * Astlib.Ast_502.Parsetree.payload) ->
Astlib.Ast_502.Parsetree.attribute list ->
Astlib.Ast_502.Parsetree.signature_itemval psig_attribute :
loc:Location.t ->
Astlib.Ast_502.Parsetree.attribute ->
Astlib.Ast_502.Parsetree.signature_itemval psig_class_type :
loc:Location.t ->
Astlib.Ast_502.Parsetree.class_type Astlib.Ast_502.Parsetree.class_infos list ->
Astlib.Ast_502.Parsetree.signature_itempsig_class_type constructs an Ast.signature_item_desc.Psig_class_type
Example OCaml
class type ct1 = ... and ... and ctn = ...
val psig_class :
loc:Location.t ->
Astlib.Ast_502.Parsetree.class_type Astlib.Ast_502.Parsetree.class_infos list ->
Astlib.Ast_502.Parsetree.signature_itempsig_class constructs an Ast.signature_item_desc.Psig_class
Example OCaml
class c1 : ... and ... and cn : ...
val psig_modtypesubst :
loc:Location.t ->
Astlib.Ast_502.Parsetree.module_type_declaration ->
Astlib.Ast_502.Parsetree.signature_itempsig_modtypesubst constructs an Ast.signature_item_desc.Psig_modtypesubst
Example OCaml
module type S := ...
val psig_modtype :
loc:Location.t ->
Astlib.Ast_502.Parsetree.module_type_declaration ->
Astlib.Ast_502.Parsetree.signature_itempsig_modtype constructs an Ast.signature_item_desc.Psig_modtype
Example OCaml
module type S = MT and module type S
val psig_recmodule :
loc:Location.t ->
Astlib.Ast_502.Parsetree.module_declaration list ->
Astlib.Ast_502.Parsetree.signature_itempsig_recmodule constructs an Ast.signature_item_desc.Psig_recmodule
Example OCaml
module rec X1 : MT1 and ... and Xn : MTn
val psig_modsubst :
loc:Location.t ->
Astlib.Ast_502.Parsetree.module_substitution ->
Astlib.Ast_502.Parsetree.signature_itemval psig_module :
loc:Location.t ->
Astlib.Ast_502.Parsetree.module_declaration ->
Astlib.Ast_502.Parsetree.signature_itempsig_module constructs an Ast.signature_item_desc.Psig_module
Example OCaml
module X = M and module X : MT
val psig_exception :
loc:Location.t ->
Astlib.Ast_502.Parsetree.type_exception ->
Astlib.Ast_502.Parsetree.signature_itemval psig_typext :
loc:Location.t ->
Astlib.Ast_502.Parsetree.type_extension ->
Astlib.Ast_502.Parsetree.signature_itemval psig_typesubst :
loc:Location.t ->
Astlib.Ast_502.Parsetree.type_declaration list ->
Astlib.Ast_502.Parsetree.signature_itempsig_typesubst constructs an Ast.signature_item_desc.Psig_typesubst
Example OCaml
type t1 := ... and ... and tn := ...
val psig_type :
loc:Location.t ->
Astlib.Ast_502.Asttypes.rec_flag ->
Astlib.Ast_502.Parsetree.type_declaration list ->
Astlib.Ast_502.Parsetree.signature_itempsig_type constructs an Ast.signature_item_desc.Psig_type
Example OCaml
type t1 = ... and ... and tn = ...
val psig_value :
loc:Location.t ->
Astlib.Ast_502.Parsetree.value_description ->
Astlib.Ast_502.Parsetree.signature_itempsig_value constructs an Ast.signature_item_desc.Psig_value
Example OCaml
val x: Texternal x: T = "s1" ... "sn"
Row field
val rinherit :
loc:Location.t ->
Astlib.Ast_502.Parsetree.core_type ->
Astlib.Ast_502.Parsetree.row_fieldval rtag :
loc:Location.t ->
string Astlib.Location.loc ->
bool ->
Astlib.Ast_502.Parsetree.core_type list ->
Astlib.Ast_502.Parsetree.row_fieldrtag constructs an Ast.row_field_desc.Rtag
Example OCaml
Rtag(`A, b, l) represents:
`Awhenbistrueandlis[],`A of Twhenbisfalseandlis[T],`A of T1 & .. & Tnwhenbisfalseandlis[T1;...Tn],`A of & T1 & .. & Tnwhenbistrueandlis[T1;...Tn].
- The
boolfield 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)
Position
position constructs an Ast.position
Pattern
val ppat_open :
loc:Location.t ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_502.Parsetree.pattern ->
Astlib.Ast_502.Parsetree.patternval ppat_extension :
loc:Location.t ->
(string Astlib.Location.loc * Astlib.Ast_502.Parsetree.payload) ->
Astlib.Ast_502.Parsetree.patternval ppat_exception :
loc:Location.t ->
Astlib.Ast_502.Parsetree.pattern ->
Astlib.Ast_502.Parsetree.patternval ppat_unpack :
loc:Location.t ->
string option Astlib.Location.loc ->
Astlib.Ast_502.Parsetree.patternppat_unpack constructs an Ast.pattern_desc.Ppat_unpack
Example OCaml
Ppat_unpack(s) represents:
(module P)whensisSome "P"(module _)whensisNone
Note: (module P : S) is represented as Ppat_constraint(Ppat_unpack(Some "P"), Ptyp_package S)
val ppat_lazy :
loc:Location.t ->
Astlib.Ast_502.Parsetree.pattern ->
Astlib.Ast_502.Parsetree.patternval ppat_type :
loc:Location.t ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_502.Parsetree.patternval ppat_constraint :
loc:Location.t ->
Astlib.Ast_502.Parsetree.pattern ->
Astlib.Ast_502.Parsetree.core_type ->
Astlib.Ast_502.Parsetree.patternval ppat_or :
loc:Location.t ->
Astlib.Ast_502.Parsetree.pattern ->
Astlib.Ast_502.Parsetree.pattern ->
Astlib.Ast_502.Parsetree.patternval ppat_array :
loc:Location.t ->
Astlib.Ast_502.Parsetree.pattern list ->
Astlib.Ast_502.Parsetree.patternval ppat_record :
loc:Location.t ->
(Astlib.Longident.t Astlib.Location.loc * Astlib.Ast_502.Parsetree.pattern)
list ->
Astlib.Ast_502.Asttypes.closed_flag ->
Astlib.Ast_502.Parsetree.patternppat_record constructs an Ast.pattern_desc.Ppat_record
Example OCaml
Ppat_record([(l1, P1) ; ... ; (ln, Pn)], flag) represents:
Invariant: n > 0
val ppat_variant :
loc:Location.t ->
string ->
Astlib.Ast_502.Parsetree.pattern option ->
Astlib.Ast_502.Parsetree.patternppat_variant constructs an Ast.pattern_desc.Ppat_variant
Example OCaml
Ppat_variant(`A, pat) represents:
`AwhenpatisNone,`A PwhenpatisSome P
val ppat_tuple :
loc:Location.t ->
Astlib.Ast_502.Parsetree.pattern list ->
Astlib.Ast_502.Parsetree.patternppat_tuple constructs an Ast.pattern_desc.Ppat_tuple
Example OCaml
Patterns (P1, ..., Pn).
Invariant: n >= 2
val ppat_interval :
loc:Location.t ->
Astlib.Ast_502.Parsetree.constant ->
Astlib.Ast_502.Parsetree.constant ->
Astlib.Ast_502.Parsetree.patternppat_interval constructs an Ast.pattern_desc.Ppat_interval
Example OCaml
Patterns such as 'a'..'z'.
Other forms of interval are recognized by the parser but rejected by the type-checker.
val ppat_constant :
loc:Location.t ->
Astlib.Ast_502.Parsetree.constant ->
Astlib.Ast_502.Parsetree.patternppat_constant constructs an Ast.pattern_desc.Ppat_constant
Example OCaml
Patterns such as 1, 'a', "true", 1.0, 1l, 1L, 1n
val ppat_alias :
loc:Location.t ->
Astlib.Ast_502.Parsetree.pattern ->
string Astlib.Location.loc ->
Astlib.Ast_502.Parsetree.patternval ppat_var :
loc:Location.t ->
string Astlib.Location.loc ->
Astlib.Ast_502.Parsetree.patternObject field
val oinherit :
loc:Location.t ->
Astlib.Ast_502.Parsetree.core_type ->
Astlib.Ast_502.Parsetree.object_fieldoinherit constructs an Ast.object_field_desc.Oinherit
val otag :
loc:Location.t ->
string Astlib.Location.loc ->
Astlib.Ast_502.Parsetree.core_type ->
Astlib.Ast_502.Parsetree.object_fieldotag constructs an Ast.object_field_desc.Otag
Module type declaration
val module_type_declaration :
loc:Location.t ->
name:string Astlib.Location.loc ->
type_:Astlib.Ast_502.Parsetree.module_type option ->
Astlib.Ast_502.Parsetree.module_type_declarationmodule_type_declaration constructs an Ast.module_type_declaration
Example OCaml
Values of type module_type_declaration represents:
S = MT,Sfor abstract module type declaration, whenpmtd_typeisNone.
Module type
val pmty_alias :
loc:Location.t ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_502.Parsetree.module_typeval pmty_extension :
loc:Location.t ->
(string Astlib.Location.loc * Astlib.Ast_502.Parsetree.payload) ->
Astlib.Ast_502.Parsetree.module_typeval pmty_typeof :
loc:Location.t ->
Astlib.Ast_502.Parsetree.module_expr ->
Astlib.Ast_502.Parsetree.module_typeval pmty_with :
loc:Location.t ->
Astlib.Ast_502.Parsetree.module_type ->
Astlib.Ast_502.Parsetree.with_constraint list ->
Astlib.Ast_502.Parsetree.module_typeval pmty_functor :
loc:Location.t ->
Astlib.Ast_502.Parsetree.functor_parameter ->
Astlib.Ast_502.Parsetree.module_type ->
Astlib.Ast_502.Parsetree.module_typeval pmty_signature :
loc:Location.t ->
Astlib.Ast_502.Parsetree.signature_item list ->
Astlib.Ast_502.Parsetree.module_typeval pmty_ident :
loc:Location.t ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_502.Parsetree.module_typeModule substitution
val module_substitution :
loc:Location.t ->
name:string Astlib.Location.loc ->
manifest:Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_502.Parsetree.module_substitutionmodule_substitution constructs an Ast.module_substitution
Example OCaml
Values of type module_substitution represents S := M
Module expr
val pmod_extension :
loc:Location.t ->
(string Astlib.Location.loc * Astlib.Ast_502.Parsetree.payload) ->
Astlib.Ast_502.Parsetree.module_exprval pmod_unpack :
loc:Location.t ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.module_exprval pmod_constraint :
loc:Location.t ->
Astlib.Ast_502.Parsetree.module_expr ->
Astlib.Ast_502.Parsetree.module_type ->
Astlib.Ast_502.Parsetree.module_exprval pmod_apply_unit :
loc:Location.t ->
Astlib.Ast_502.Parsetree.module_expr ->
Astlib.Ast_502.Parsetree.module_exprval pmod_apply :
loc:Location.t ->
Astlib.Ast_502.Parsetree.module_expr ->
Astlib.Ast_502.Parsetree.module_expr ->
Astlib.Ast_502.Parsetree.module_exprval pmod_functor :
loc:Location.t ->
Astlib.Ast_502.Parsetree.functor_parameter ->
Astlib.Ast_502.Parsetree.module_expr ->
Astlib.Ast_502.Parsetree.module_exprval pmod_structure :
loc:Location.t ->
Astlib.Ast_502.Parsetree.structure_item list ->
Astlib.Ast_502.Parsetree.module_exprval pmod_ident :
loc:Location.t ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_502.Parsetree.module_exprModule declaration
val module_declaration :
loc:Location.t ->
name:string option Astlib.Location.loc ->
type_:Astlib.Ast_502.Parsetree.module_type ->
Astlib.Ast_502.Parsetree.module_declarationmodule_declaration constructs an Ast.module_declaration
Example OCaml
Values of type module_declaration represents S : MT
Module binding
val module_binding :
loc:Location.t ->
name:string option Astlib.Location.loc ->
expr:Astlib.Ast_502.Parsetree.module_expr ->
Astlib.Ast_502.Parsetree.module_bindingmodule_binding constructs an Ast.module_binding
Example OCaml
Values of type module_binding represents module X = ME
Location
val location :
start:Lexing.position ->
end_:Lexing.position ->
ghost:bool ->
Astlib.Location.tlocation constructs an Ast.location
Letop
val letop :
let_:Astlib.Ast_502.Parsetree.binding_op ->
ands:Astlib.Ast_502.Parsetree.binding_op list ->
body:Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.letopletop constructs an Ast.letop
Label declaration
val label_declaration :
loc:Location.t ->
name:string Astlib.Location.loc ->
mutable_:Astlib.Ast_502.Asttypes.mutable_flag ->
type_:Astlib.Ast_502.Parsetree.core_type ->
Astlib.Ast_502.Parsetree.label_declarationlabel_declaration constructs an Ast.label_declaration
Example OCaml
{ ...; l: T; ... }whenpld_mutableisImmutable,{ ...; mutable l: T; ... }whenpld_mutableisMutable.
Note: T can be a Ptyp_poly.
Function param
val pparam_newtype :
loc:Location.t ->
string Astlib.Location.loc ->
Astlib.Ast_502.Parsetree.function_parampparam_newtype constructs an Ast.function_param_desc.Pparam_newtype
Example OCaml
Pparam_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.
val pparam_val :
loc:Location.t ->
Astlib.Ast_502.Asttypes.arg_label ->
Astlib.Ast_502.Parsetree.expression option ->
Astlib.Ast_502.Parsetree.pattern ->
Astlib.Ast_502.Parsetree.function_parampparam_val constructs an Ast.function_param_desc.Pparam_val
Example OCaml
Pparam_val (lbl, exp0, P) represents the parameter:
PwhenlblisNolabelandexp0isNone~l:PwhenlblisLabelled landexp0isNone?l:PwhenlblisOptional landexp0isNone?l:(P = E0)whenlblisOptional landexp0isSome E0
Note: If E0 is provided, only Optional is allowed.
Extension constructor
val extension_constructor :
loc:Location.t ->
name:string Astlib.Location.loc ->
kind:Astlib.Ast_502.Parsetree.extension_constructor_kind ->
Astlib.Ast_502.Parsetree.extension_constructorextension_constructor constructs an Ast.extension_constructor
Expression
val pexp_extension :
loc:Location.t ->
(string Astlib.Location.loc * Astlib.Ast_502.Parsetree.payload) ->
Astlib.Ast_502.Parsetree.expressionval pexp_letop :
loc:Location.t ->
Astlib.Ast_502.Parsetree.letop ->
Astlib.Ast_502.Parsetree.expressionpexp_letop constructs an Ast.expression_desc.Pexp_letop
Example OCaml
let* P = E0 in E1let* P0 = E00 and* P1 = E01 in E1
val pexp_open :
loc:Location.t ->
Astlib.Ast_502.Parsetree.module_expr Astlib.Ast_502.Parsetree.open_infos ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.expressionpexp_open constructs an Ast.expression_desc.Pexp_open
Example OCaml
M.(E)let open M in Elet open! M in E
val pexp_pack :
loc:Location.t ->
Astlib.Ast_502.Parsetree.module_expr ->
Astlib.Ast_502.Parsetree.expressionpexp_pack constructs an Ast.expression_desc.Pexp_pack
Example OCaml
(module ME).
(module ME : S) is represented as Pexp_constraint(Pexp_pack ME, Ptyp_package S)
val pexp_newtype :
loc:Location.t ->
string Astlib.Location.loc ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.expressionval pexp_object :
loc:Location.t ->
Astlib.Ast_502.Parsetree.class_structure ->
Astlib.Ast_502.Parsetree.expressionval pexp_poly :
loc:Location.t ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.core_type option ->
Astlib.Ast_502.Parsetree.expressionpexp_poly constructs an Ast.expression_desc.Pexp_poly
Example OCaml
Used for method bodies.
Can only be used as the expression under Cfk_concrete for methods (not values).
val pexp_lazy :
loc:Location.t ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.expressionval pexp_assert :
loc:Location.t ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.expressionpexp_assert constructs an Ast.expression_desc.Pexp_assert
Example OCaml
assert E.
Note: assert false is treated in a special way by the type-checker.
val pexp_letexception :
loc:Location.t ->
Astlib.Ast_502.Parsetree.extension_constructor ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.expressionpexp_letexception constructs an Ast.expression_desc.Pexp_letexception
Example OCaml
let exception C in E
val pexp_letmodule :
loc:Location.t ->
string option Astlib.Location.loc ->
Astlib.Ast_502.Parsetree.module_expr ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.expressionval pexp_override :
loc:Location.t ->
(string Astlib.Location.loc * Astlib.Ast_502.Parsetree.expression) list ->
Astlib.Ast_502.Parsetree.expressionpexp_override constructs an Ast.expression_desc.Pexp_override
Example OCaml
{< x1 = E1; ...; xn = En >}
val pexp_setinstvar :
loc:Location.t ->
string Astlib.Location.loc ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.expressionval pexp_new :
loc:Location.t ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_502.Parsetree.expressionval pexp_send :
loc:Location.t ->
Astlib.Ast_502.Parsetree.expression ->
string Astlib.Location.loc ->
Astlib.Ast_502.Parsetree.expressionval pexp_coerce :
loc:Location.t ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.core_type option ->
Astlib.Ast_502.Parsetree.core_type ->
Astlib.Ast_502.Parsetree.expressionpexp_coerce constructs an Ast.expression_desc.Pexp_coerce
Example OCaml
Pexp_coerce(E, from, T) represents
(E :> T)whenfromisNone,(E : T0 :> T)whenfromisSome T0.
val pexp_constraint :
loc:Location.t ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.core_type ->
Astlib.Ast_502.Parsetree.expressionval pexp_for :
loc:Location.t ->
Astlib.Ast_502.Parsetree.pattern ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Asttypes.direction_flag ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.expressionpexp_for constructs an Ast.expression_desc.Pexp_for
Example OCaml
Pexp_for(i, E1, E2, direction, E3) represents:
val pexp_while :
loc:Location.t ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.expressionval pexp_sequence :
loc:Location.t ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.expressionval pexp_ifthenelse :
loc:Location.t ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.expression option ->
Astlib.Ast_502.Parsetree.expressionval pexp_array :
loc:Location.t ->
Astlib.Ast_502.Parsetree.expression list ->
Astlib.Ast_502.Parsetree.expressionval pexp_setfield :
loc:Location.t ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.expressionval pexp_field :
loc:Location.t ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_502.Parsetree.expressionval pexp_record :
loc:Location.t ->
(Astlib.Longident.t Astlib.Location.loc * Astlib.Ast_502.Parsetree.expression)
list ->
Astlib.Ast_502.Parsetree.expression option ->
Astlib.Ast_502.Parsetree.expressionpexp_record constructs an Ast.expression_desc.Pexp_record
Example OCaml
Pexp_record([(l1,P1) ; ... ; (ln,Pn)], exp0) represents
{ l1=P1; ...; ln=Pn }whenexp0isNone{ E0 with l1=P1; ...; ln=Pn }whenexp0isSome E0
Invariant: n > 0
val pexp_variant :
loc:Location.t ->
string ->
Astlib.Ast_502.Parsetree.expression option ->
Astlib.Ast_502.Parsetree.expressionpexp_variant constructs an Ast.expression_desc.Pexp_variant
Example OCaml
Pexp_variant(`A, exp) represents
`AwhenexpisNone`A EwhenexpisSome E
val pexp_construct :
loc:Location.t ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_502.Parsetree.expression option ->
Astlib.Ast_502.Parsetree.expressionpexp_construct constructs an Ast.expression_desc.Pexp_construct
Example OCaml
Pexp_construct(C, exp) represents:
CwhenexpisNone,C EwhenexpisSome E,C (E1, ..., En)whenexpisSome (Pexp_tuple[E1;...;En])
val pexp_tuple :
loc:Location.t ->
Astlib.Ast_502.Parsetree.expression list ->
Astlib.Ast_502.Parsetree.expressionpexp_tuple constructs an Ast.expression_desc.Pexp_tuple
Example OCaml
Expressions (E1, ..., En)
Invariant: n >= 2
val pexp_try :
loc:Location.t ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.case list ->
Astlib.Ast_502.Parsetree.expressionpexp_try constructs an Ast.expression_desc.Pexp_try
Example OCaml
try E0 with P1 -> E1 | ... | Pn -> En
val pexp_match :
loc:Location.t ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.case list ->
Astlib.Ast_502.Parsetree.expressionpexp_match constructs an Ast.expression_desc.Pexp_match
Example OCaml
match E0 with P1 -> E1 | ... | Pn -> En
val pexp_apply :
loc:Location.t ->
Astlib.Ast_502.Parsetree.expression ->
(Astlib.Ast_502.Asttypes.arg_label * Astlib.Ast_502.Parsetree.expression)
list ->
Astlib.Ast_502.Parsetree.expressionpexp_apply constructs an Ast.expression_desc.Pexp_apply
Example OCaml
Pexp_apply(E0, [(l1, E1) ; ... ; (ln, En)]) represents E0 ~l1:E1 ... ~ln:En
li can be Nolabel (non labeled argument), Labelled (labelled arguments) or Optional (optional argument).
Invariant: n > 0
val pexp_let :
loc:Location.t ->
Astlib.Ast_502.Asttypes.rec_flag ->
Astlib.Ast_502.Parsetree.value_binding list ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.expressionpexp_let constructs an Ast.expression_desc.Pexp_let
Example OCaml
Pexp_let(flag, [(P1,E1) ; ... ; (Pn,En)], E) represents:
let P1 = E1 and ... and Pn = EN in EwhenflagisNonrecursive,let rec P1 = E1 and ... and Pn = EN in EwhenflagisRecursive.
val pexp_constant :
loc:Location.t ->
Astlib.Ast_502.Parsetree.constant ->
Astlib.Ast_502.Parsetree.expressionpexp_constant constructs an Ast.expression_desc.Pexp_constant
Example OCaml
Expressions constant such as 1, 'a', "true", 1.0, 1l, 1L, 1n
val pexp_ident :
loc:Location.t ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_502.Parsetree.expressionDirective argument
pdir_bool constructs an Ast.directive_argument_desc.Pdir_bool
val pdir_ident :
loc:Location.t ->
Astlib.Longident.t ->
Astlib.Ast_502.Parsetree.directive_argumentpdir_ident constructs an Ast.directive_argument_desc.Pdir_ident
val pdir_int :
loc:Location.t ->
string ->
char option ->
Astlib.Ast_502.Parsetree.directive_argumentpdir_int constructs an Ast.directive_argument_desc.Pdir_int
pdir_string constructs an Ast.directive_argument_desc.Pdir_string
Core type
val ptyp_extension :
loc:Location.t ->
(string Astlib.Location.loc * Astlib.Ast_502.Parsetree.payload) ->
Astlib.Ast_502.Parsetree.core_typeval ptyp_open :
loc:Location.t ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_502.Parsetree.core_type ->
Astlib.Ast_502.Parsetree.core_typeval ptyp_package :
loc:Location.t ->
(Astlib.Longident.t Astlib.Location.loc
* (Astlib.Longident.t Astlib.Location.loc
* Astlib.Ast_502.Parsetree.core_type)
list) ->
Astlib.Ast_502.Parsetree.core_typeval ptyp_poly :
loc:Location.t ->
string Astlib.Location.loc list ->
Astlib.Ast_502.Parsetree.core_type ->
Astlib.Ast_502.Parsetree.core_typeptyp_poly constructs an Ast.core_type_desc.Ptyp_poly
Example OCaml
'a1 ... 'an. T
Can only appear in the following context:
- As the
core_typeof aPpat_constraintnode corresponding to a constraint on a let-binding:
let x : 'a1 ... 'an. T = e ...- Under
Cfk_virtualfor methods (not values).
- As the
core_typeof aPctf_methodnode.
- As the
pld_typefield of alabel_declaration.
- As a
core_typeof aPtyp_objectnode.
- As the
pval_typefield of avalue_description.
val ptyp_variant :
loc:Location.t ->
Astlib.Ast_502.Parsetree.row_field list ->
Astlib.Ast_502.Asttypes.closed_flag ->
string list option ->
Astlib.Ast_502.Parsetree.core_typeptyp_variant constructs an Ast.core_type_desc.Ptyp_variant
Example OCaml
Ptyp_variant([`A;`B], flag, labels) represents:
val ptyp_alias :
loc:Location.t ->
Astlib.Ast_502.Parsetree.core_type ->
string Astlib.Location.loc ->
Astlib.Ast_502.Parsetree.core_typeval ptyp_class :
loc:Location.t ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_502.Parsetree.core_type list ->
Astlib.Ast_502.Parsetree.core_typeptyp_class constructs an Ast.core_type_desc.Ptyp_class
Example OCaml
Ptyp_class(tconstr, l) represents:
#tconstrwhenl=[],T #tconstrwhenl=[T],(T1, ..., Tn) #tconstrwhenl=[T1 ; ... ; Tn].
val ptyp_object :
loc:Location.t ->
Astlib.Ast_502.Parsetree.object_field list ->
Astlib.Ast_502.Asttypes.closed_flag ->
Astlib.Ast_502.Parsetree.core_typeptyp_object constructs an Ast.core_type_desc.Ptyp_object
Example OCaml
Ptyp_object([ l1:T1; ...; ln:Tn ], flag) represents:
val ptyp_constr :
loc:Location.t ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_502.Parsetree.core_type list ->
Astlib.Ast_502.Parsetree.core_typeptyp_constr constructs an Ast.core_type_desc.Ptyp_constr
Example OCaml
Ptyp_constr(lident, l) represents:
tconstrwhenl=[],T tconstrwhenl=[T],(T1, ..., Tn) tconstrwhenl=[T1 ; ... ; Tn].
val ptyp_tuple :
loc:Location.t ->
Astlib.Ast_502.Parsetree.core_type list ->
Astlib.Ast_502.Parsetree.core_typeptyp_tuple constructs an Ast.core_type_desc.Ptyp_tuple
Example OCaml
Ptyp_tuple([T1 ; ... ; Tn]) represents a product type T1 * ... * Tn.
Invariant: n >= 2.
val ptyp_arrow :
loc:Location.t ->
Astlib.Ast_502.Asttypes.arg_label ->
Astlib.Ast_502.Parsetree.core_type ->
Astlib.Ast_502.Parsetree.core_type ->
Astlib.Ast_502.Parsetree.core_typeptyp_arrow constructs an Ast.core_type_desc.Ptyp_arrow
Example OCaml
Ptyp_arrow(lbl, T1, T2) represents:
Constructor declaration
Class type field
val pctf_extension :
loc:Location.t ->
(string Astlib.Location.loc * Astlib.Ast_502.Parsetree.payload) ->
Astlib.Ast_502.Parsetree.class_type_fieldval pctf_attribute :
loc:Location.t ->
Astlib.Ast_502.Parsetree.attribute ->
Astlib.Ast_502.Parsetree.class_type_fieldval pctf_constraint :
loc:Location.t ->
(Astlib.Ast_502.Parsetree.core_type * Astlib.Ast_502.Parsetree.core_type) ->
Astlib.Ast_502.Parsetree.class_type_fieldpctf_constraint constructs an Ast.class_type_field_desc.Pctf_constraint
Example OCaml
constraint T1 = T2
val pctf_method :
loc:Location.t ->
(string Astlib.Location.loc
* Astlib.Ast_502.Asttypes.private_flag
* Astlib.Ast_502.Asttypes.virtual_flag
* Astlib.Ast_502.Parsetree.core_type) ->
Astlib.Ast_502.Parsetree.class_type_fieldpctf_method constructs an Ast.class_type_field_desc.Pctf_method
Example OCaml
method x: T
Note: T can be a Ptyp_poly.
val pctf_inherit :
loc:Location.t ->
Astlib.Ast_502.Parsetree.class_type ->
Astlib.Ast_502.Parsetree.class_type_fieldClass type
val pcty_extension :
loc:Location.t ->
(string Astlib.Location.loc * Astlib.Ast_502.Parsetree.payload) ->
Astlib.Ast_502.Parsetree.class_typeval pcty_arrow :
loc:Location.t ->
Astlib.Ast_502.Asttypes.arg_label ->
Astlib.Ast_502.Parsetree.core_type ->
Astlib.Ast_502.Parsetree.class_type ->
Astlib.Ast_502.Parsetree.class_typepcty_arrow constructs an Ast.class_type_desc.Pcty_arrow
Example OCaml
Pcty_arrow(lbl, T, CT) represents:
T -> CTwhenlblisNolabel,~l:T -> CTwhenlblisLabelled l,?l:T -> CTwhenlblisOptional l.
val pcty_signature :
loc:Location.t ->
Astlib.Ast_502.Parsetree.class_signature ->
Astlib.Ast_502.Parsetree.class_typeval pcty_constr :
loc:Location.t ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_502.Parsetree.core_type list ->
Astlib.Ast_502.Parsetree.class_typeClass structure
val class_structure :
self:Astlib.Ast_502.Parsetree.pattern ->
fields:Astlib.Ast_502.Parsetree.class_field list ->
Astlib.Ast_502.Parsetree.class_structureclass_structure constructs an Ast.class_structure
Example OCaml
Values of type class_structure represents:
object(selfpat) ... endobject ... endwhenpcstr_selfisPpat_any
Class signature
val class_signature :
self:Astlib.Ast_502.Parsetree.core_type ->
fields:Astlib.Ast_502.Parsetree.class_type_field list ->
Astlib.Ast_502.Parsetree.class_signatureclass_signature constructs an Ast.class_signature
Example OCaml
Values of type class_signature represents:
object('selfpat) ... endobject ... endwhenpcsig_selfisPtyp_any
Class field
val pcf_extension :
loc:Location.t ->
(string Astlib.Location.loc * Astlib.Ast_502.Parsetree.payload) ->
Astlib.Ast_502.Parsetree.class_fieldval pcf_attribute :
loc:Location.t ->
Astlib.Ast_502.Parsetree.attribute ->
Astlib.Ast_502.Parsetree.class_fieldval pcf_initializer :
loc:Location.t ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.class_fieldval pcf_constraint :
loc:Location.t ->
(Astlib.Ast_502.Parsetree.core_type * Astlib.Ast_502.Parsetree.core_type) ->
Astlib.Ast_502.Parsetree.class_fieldval pcf_method :
loc:Location.t ->
(string Astlib.Location.loc
* Astlib.Ast_502.Asttypes.private_flag
* Astlib.Ast_502.Parsetree.class_field_kind) ->
Astlib.Ast_502.Parsetree.class_fieldpcf_method constructs an Ast.class_field_desc.Pcf_method
Example OCaml
val pcf_val :
loc:Location.t ->
(string Astlib.Location.loc
* Astlib.Ast_502.Asttypes.mutable_flag
* Astlib.Ast_502.Parsetree.class_field_kind) ->
Astlib.Ast_502.Parsetree.class_fieldpcf_val constructs an Ast.class_field_desc.Pcf_val
Example OCaml
Pcf_val(x,flag, kind) represents:
val x = EwhenflagisImmutableandkindisCfk_concrete(Fresh, E)val virtual x: TwhenflagisImmutableandkindisCfk_virtual(T)val mutable x = EwhenflagisMutableandkindisCfk_concrete(Fresh, E)val mutable virtual x: TwhenflagisMutableandkindisCfk_virtual(T)
val pcf_inherit :
loc:Location.t ->
Astlib.Ast_502.Asttypes.override_flag ->
Astlib.Ast_502.Parsetree.class_expr ->
string Astlib.Location.loc option ->
Astlib.Ast_502.Parsetree.class_fieldpcf_inherit constructs an Ast.class_field_desc.Pcf_inherit
Example OCaml
Pcf_inherit(flag, CE, s) represents:
Class expr
val pcl_extension :
loc:Location.t ->
(string Astlib.Location.loc * Astlib.Ast_502.Parsetree.payload) ->
Astlib.Ast_502.Parsetree.class_exprval pcl_constraint :
loc:Location.t ->
Astlib.Ast_502.Parsetree.class_expr ->
Astlib.Ast_502.Parsetree.class_type ->
Astlib.Ast_502.Parsetree.class_exprval pcl_let :
loc:Location.t ->
Astlib.Ast_502.Asttypes.rec_flag ->
Astlib.Ast_502.Parsetree.value_binding list ->
Astlib.Ast_502.Parsetree.class_expr ->
Astlib.Ast_502.Parsetree.class_exprpcl_let constructs an Ast.class_expr_desc.Pcl_let
Example OCaml
Pcl_let(rec, [(P1, E1); ... ; (Pn, En)], CE) represents:
let P1 = E1 and ... and Pn = EN in CEwhenrecisNonrecursive,let rec P1 = E1 and ... and Pn = EN in CEwhenrecisRecursive.
val pcl_apply :
loc:Location.t ->
Astlib.Ast_502.Parsetree.class_expr ->
(Astlib.Ast_502.Asttypes.arg_label * Astlib.Ast_502.Parsetree.expression)
list ->
Astlib.Ast_502.Parsetree.class_exprpcl_apply constructs an Ast.class_expr_desc.Pcl_apply
Example OCaml
Pcl_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
val pcl_fun :
loc:Location.t ->
Astlib.Ast_502.Asttypes.arg_label ->
Astlib.Ast_502.Parsetree.expression option ->
Astlib.Ast_502.Parsetree.pattern ->
Astlib.Ast_502.Parsetree.class_expr ->
Astlib.Ast_502.Parsetree.class_exprpcl_fun constructs an Ast.class_expr_desc.Pcl_fun
Example OCaml
Pcl_fun(lbl, exp0, P, CE) represents:
fun P -> CEwhenlblisNolabelandexp0isNone,fun ~l:P -> CEwhenlblisLabelled landexp0isNone,fun ?l:P -> CEwhenlblisOptional landexp0isNone,fun ?l:(P = E0) -> CEwhenlblisOptional landexp0isSome E0.
val pcl_structure :
loc:Location.t ->
Astlib.Ast_502.Parsetree.class_structure ->
Astlib.Ast_502.Parsetree.class_exprval pcl_constr :
loc:Location.t ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_502.Parsetree.core_type list ->
Astlib.Ast_502.Parsetree.class_exprCase
val case :
lhs:Astlib.Ast_502.Parsetree.pattern ->
guard:Astlib.Ast_502.Parsetree.expression option ->
rhs:Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.caseBinding op
val binding_op :
loc:Location.t ->
op:string Astlib.Location.loc ->
pat:Astlib.Ast_502.Parsetree.pattern ->
exp:Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.binding_opbinding_op constructs an Ast.binding_op
Attribute
val attribute :
loc:Location.t ->
name:string Astlib.Location.loc ->
payload:Astlib.Ast_502.Parsetree.payload ->
Astlib.Ast_502.Parsetree.attributeattribute constructs an Ast.attribute
Example OCaml
Attributes such as [\@id ARG] and [\@\@id ARG].
Metadata containers passed around within the AST. The compiler ignores unknown attributes.
'a open infos
val open_infos :
loc:Location.t ->
expr:'a ->
override:Astlib.Ast_502.Asttypes.override_flag ->
'a Astlib.Ast_502.Parsetree.open_infosopen_infos constructs an Ast.'aopen_infos
Example OCaml
Values of type 'a open_infos represents:
open! Xwhenpopen_overrideisOverride(silences the "used identifier shadowing" warning)open Xwhenpopen_overrideisFresh
'a include infos
include_infos constructs an Ast.'ainclude_infos
'a class infos
val class_infos :
loc:Location.t ->
virt:Astlib.Ast_502.Asttypes.virtual_flag ->
params:
(Astlib.Ast_502.Parsetree.core_type
* (Astlib.Ast_502.Asttypes.variance * Astlib.Ast_502.Asttypes.injectivity))
list ->
name:string Astlib.Location.loc ->
expr:'a ->
'a Astlib.Ast_502.Parsetree.class_infosclass_infos constructs an Ast.'aclass_infos
Example OCaml
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.
This module contains updated versions of node constructors that were kept stable when the node changed. For every function in this module, there's an equally-named function outside this module. The function outside this module will stay stable, whereas the function inside this module will adapt potential upcoming new compiler features. Only use a function in this module, if the equally-named one outside this module is missing a feature you need.
val ppat_construct :
loc:Astlib.Location.t ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_502.Parsetree.pattern option ->
Astlib.Ast_502.Parsetree.patternval coalesce_arity :
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.expressionIf an expression e is a function of arity n with a body that is another function with arity m, then coalesce_arity e will produce a function of arity n + m. This will not run recursively, so an expression fun x -> fun y -> fun z -> x + y + z will become fun x y -> fun z -> x + y + z.
val constructor_declaration :
loc:Astlib.Location.t ->
name:string Astlib.Location.loc ->
args:Astlib.Ast_502.Parsetree.constructor_arguments ->
res:Astlib.Ast_502.Parsetree.core_type option ->
Astlib.Ast_502.Parsetree.constructor_declarationevar id produces a Pexp_ident _ expression, it parses its input so you can pass any dot-separated identifier, for instance: evar ~loc "Foo.bar".
val eapply :
loc:Location.t ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.expression list ->
Astlib.Ast_502.Parsetree.expressionSame as pexp_apply but without labels
val eabstract :
loc:Location.t ->
Astlib.Ast_502.Parsetree.pattern list ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.expressionval esequence :
loc:Location.t ->
Astlib.Ast_502.Parsetree.expression list ->
Astlib.Ast_502.Parsetree.expressionval ppat_tuple_opt :
loc:Location.t ->
Astlib.Ast_502.Parsetree.pattern list ->
Astlib.Ast_502.Parsetree.pattern optionval pexp_tuple_opt :
loc:Location.t ->
Astlib.Ast_502.Parsetree.expression list ->
Astlib.Ast_502.Parsetree.expression optionval pexp_fun :
loc:Location.t ->
Astlib.Ast_502.Asttypes.arg_label ->
Astlib.Ast_502.Parsetree.expression option ->
Astlib.Ast_502.Parsetree.pattern ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.expressionpexp_fun can be used to create function expressions. It will check if the function's body is itself a function expression and if so it will coalesce the arguments.
For example, if we have pexp_fun Nolabel None (var "x") f and f is fun y -> x + y then the function expression returned will be fun x y -> x + y and not fun x -> y -> x + y. However, it will be more efficient to create maximum arity functions directly with pexp_function.
val pexp_function :
loc:Location.t ->
Astlib.Ast_502.Parsetree.function_param list ->
Astlib.Ast_502.Parsetree.type_constraint option ->
Astlib.Ast_502.Parsetree.function_body ->
Astlib.Ast_502.Parsetree.expressionval pexp_function_cases :
loc:Location.t ->
Astlib.Ast_502.Parsetree.case list ->
Astlib.Ast_502.Parsetree.expressionpexp_function_cases builds an expression in the shape function C1 -> E1 | ....
val pconstruct :
Astlib.Ast_502.Parsetree.constructor_declaration ->
Astlib.Ast_502.Parsetree.pattern option ->
Astlib.Ast_502.Parsetree.patternval econstruct :
Astlib.Ast_502.Parsetree.constructor_declaration ->
Astlib.Ast_502.Parsetree.expression option ->
Astlib.Ast_502.Parsetree.expressionval elist_tail :
loc:Location.t ->
Astlib.Ast_502.Parsetree.expression list ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.expressionelist_tail ~loc [expr1; expr2; expr3] expr_tail produces the expression expr1::expr2::expr3::expr_tail.
val elist :
loc:Location.t ->
Astlib.Ast_502.Parsetree.expression list ->
Astlib.Ast_502.Parsetree.expressionelist ~loc [expr1; expr2; expr3] produces the list litteral expression [expr1; expr2; expr3].
val plist_tail :
loc:Location.t ->
Astlib.Ast_502.Parsetree.pattern list ->
Astlib.Ast_502.Parsetree.pattern ->
Astlib.Ast_502.Parsetree.patternplist_tail ~loc [pat1; pat2; pat3] pat_tail produces the pattern pat1::pat2::pat3::pat_tail.
val plist :
loc:Location.t ->
Astlib.Ast_502.Parsetree.pattern list ->
Astlib.Ast_502.Parsetree.patternplist ~loc [pat1; pat2; pat3] produces the list pattern [pat1; pat2; pat3].
val value_binding :
loc:Location.t ->
pat:Astlib.Ast_502.Parsetree.pattern ->
expr:Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.value_bindingval pstr_value_list :
loc:Location.t ->
Ppxlib_ast.Asttypes.rec_flag ->
Astlib.Ast_502.Parsetree.value_binding list ->
Astlib.Ast_502.Parsetree.structure_item listpstr_value_list ~loc rf vbs = pstr_value ~loc rf vbs if vbs <> [], [] otherwise.
val nonrec_type_declaration :
loc:Location.t ->
name:string Loc.t ->
params:
(Astlib.Ast_502.Parsetree.core_type * Ppxlib_ast.Asttypes.variance) list ->
cstrs:
(Astlib.Ast_502.Parsetree.core_type
* Astlib.Ast_502.Parsetree.core_type
* Location.t)
list ->
kind:Astlib.Ast_502.Parsetree.type_kind ->
private_:Ppxlib_ast.Asttypes.private_flag ->
manifest:Astlib.Ast_502.Parsetree.core_type option ->
Astlib.Ast_502.Parsetree.type_declarationval unapplied_type_constr_conv :
loc:Location.t ->
Longident.t Loc.t ->
f:(string -> string) ->
Astlib.Ast_502.Parsetree.expressionunapplied_type_constr_conv is the standard way to map identifiers to conversion fonctions, for preprocessor that creates values that follow the structure of types. More precisely, path_conv path (sprintf "sexp_of_%s") is:
- sexp_of_t if path is "t"
- A.B.sexp_of_foo if path is "A.B.foo"
- A.B.sexp_of_f__foo (module A1) (module A2) if path is "A.B.F(A1)(A2).foo"
type_constr_convalso applies it to a list of expression, which both prevents the compiler from allocating useless closures, and almost always what is needed, since type constructors are always applied.
val type_constr_conv :
loc:Location.t ->
Longident.t Loc.t ->
f:(string -> string) ->
Astlib.Ast_502.Parsetree.expression list ->
Astlib.Ast_502.Parsetree.expressionval eta_reduce :
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.expression optionTries to simplify fun v1 v2 .. -> f v1 v2 .. into f. Only works when f is a path, not an arbitrary expression as that would change the meaning of the code. This can be used either for cleaning up the generated code, or to reduce allocation if f is a local variable (the compiler won't optimize the allocation of the closure).
Eta-reduction can change the types/behavior in some corner cases that are unlikely to show up in generated code:
- if
fhas optional arguments, eta-expandingfcan drop them - because labels commute, it can change the type of an expression: $ let f ~x y = x + y let f2 = fun x -> add x;; val f : x:int -> int -> int = <fun> val f2 : int -> x:int -> int = <fun> In fact, if
fdoes side effects before receiving all its arguments, and if the eta-expansion is partially applied, eta-reducing could change behavior.
eta_reduce_if_possible_and_nonrec is meant for the case where the resulting expression is going to be bound in a potentially recursive let-binding, where we have to keep the eta-expansion when rec_flag is Recursive to avoid a compile error.
val eta_reduce_if_possible :
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.expressionval eta_reduce_if_possible_and_nonrec :
Astlib.Ast_502.Parsetree.expression ->
rec_flag:Astlib.Ast_502.Asttypes.rec_flag ->
Astlib.Ast_502.Parsetree.expression- Value description
- Value binding
- Type extension
- Type exception
- Type declaration
- Toplevel directive
- Structure item
- Signature item
- Row field
- Position
- Pattern
- Object field
- Module type declaration
- Module type
- Module substitution
- Module expr
- Module declaration
- Module binding
- Location
- Letop
- Label declaration
- Function param
- Extension constructor
- Expression
- Directive argument
- Core type
- Constructor declaration
- Class type field
- Class type
- Class structure
- Class signature
- Class field
- Class expr
- Case
- Binding op
- Attribute
- 'a open infos
- 'a include infos
- 'a class infos