package ppxlib
- Parameters
 - 
        
          Signature
        
          
          
- 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
 - 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=d9d959fc9f84260487e45684dc741898a92fc5506b61a7f5cac65d21832db925
    
    
  sha512=e428b1e3b89261c7efdaa18016264d1afbf067cb9b0d41124b04796c2487ac7ca8ee9a24a60d56f20d1774cb44aaa9ecf1512f17455812ba8d62d4ef93616ee7
    
    
  doc/ppxlib/Ppxlib/Ast_builder/Make/index.html
Module Ast_builder.MakeSource
Build Ast helpers with the location argument factorized.
Parameters
Signature
Value description
val value_description : 
  name:string Astlib.Location.loc ->
  type_:Astlib.Ast_500.Parsetree.core_type ->
  prim:string list ->
  Astlib.Ast_500.Parsetree.value_descriptionvalue_description constructs an Ast.value_description
Example OCaml
Values of type value_description represents:
Value binding
val value_binding : 
  pat:Astlib.Ast_500.Parsetree.pattern ->
  expr:Astlib.Ast_500.Parsetree.expression ->
  Astlib.Ast_500.Parsetree.value_bindingvalue_binding constructs an Ast.value_binding
Type extension
val type_extension : 
  path:Astlib.Longident.t Astlib.Location.loc ->
  params:
    (Astlib.Ast_500.Parsetree.core_type
     * (Astlib.Ast_500.Asttypes.variance * Astlib.Ast_500.Asttypes.injectivity))
      list ->
  constructors:Astlib.Ast_500.Parsetree.extension_constructor list ->
  private_:Astlib.Ast_500.Asttypes.private_flag ->
  Astlib.Ast_500.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 : 
  Astlib.Ast_500.Parsetree.extension_constructor ->
  Astlib.Ast_500.Parsetree.type_exceptiontype_exception constructs an Ast.type_exception
Example OCaml
Definition of a new exception (exception E).
Type declaration
val type_declaration : 
  name:string Astlib.Location.loc ->
  params:
    (Astlib.Ast_500.Parsetree.core_type
     * (Astlib.Ast_500.Asttypes.variance * Astlib.Ast_500.Asttypes.injectivity))
      list ->
  cstrs:
    (Astlib.Ast_500.Parsetree.core_type
     * Astlib.Ast_500.Parsetree.core_type
     * Astlib.Location.t)
      list ->
  kind:Astlib.Ast_500.Parsetree.type_kind ->
  private_:Astlib.Ast_500.Asttypes.private_flag ->
  manifest:Astlib.Ast_500.Parsetree.core_type option ->
  Astlib.Ast_500.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 : 
  name:string Astlib.Location.loc ->
  arg:Astlib.Ast_500.Parsetree.directive_argument option ->
  Astlib.Ast_500.Parsetree.toplevel_directivetoplevel_directive constructs an Ast.toplevel_directive
Structure item
val pstr_extension : 
  (string Astlib.Location.loc * Astlib.Ast_500.Parsetree.payload) ->
  Astlib.Ast_500.Parsetree.attribute list ->
  Astlib.Ast_500.Parsetree.structure_itemval pstr_attribute : 
  Astlib.Ast_500.Parsetree.attribute ->
  Astlib.Ast_500.Parsetree.structure_itemval pstr_class_type : 
  Astlib.Ast_500.Parsetree.class_type Astlib.Ast_500.Parsetree.class_infos list ->
  Astlib.Ast_500.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 : 
  Astlib.Ast_500.Parsetree.class_expr Astlib.Ast_500.Parsetree.class_infos list ->
  Astlib.Ast_500.Parsetree.structure_itempstr_class constructs an Ast.structure_item_desc.Pstr_class
Example OCaml
class c1 = ... and ... and cn = ...
val pstr_recmodule : 
  Astlib.Ast_500.Parsetree.module_binding list ->
  Astlib.Ast_500.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 : 
  Astlib.Ast_500.Parsetree.module_binding ->
  Astlib.Ast_500.Parsetree.structure_itemval pstr_exception : 
  Astlib.Ast_500.Parsetree.type_exception ->
  Astlib.Ast_500.Parsetree.structure_itempstr_exception constructs an Ast.structure_item_desc.Pstr_exception
Example OCaml
exception C of Texception C = M.X
val pstr_typext : 
  Astlib.Ast_500.Parsetree.type_extension ->
  Astlib.Ast_500.Parsetree.structure_itemval pstr_type : 
  Astlib.Ast_500.Asttypes.rec_flag ->
  Astlib.Ast_500.Parsetree.type_declaration list ->
  Astlib.Ast_500.Parsetree.structure_itempstr_type constructs an Ast.structure_item_desc.Pstr_type
Example OCaml
type t1 = ... and ... and tn = ...
val pstr_primitive : 
  Astlib.Ast_500.Parsetree.value_description ->
  Astlib.Ast_500.Parsetree.structure_itempstr_primitive constructs an Ast.structure_item_desc.Pstr_primitive
Example OCaml
val x: Texternal x: T = "s1" ... "sn"
val pstr_value : 
  Astlib.Ast_500.Asttypes.rec_flag ->
  Astlib.Ast_500.Parsetree.value_binding list ->
  Astlib.Ast_500.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 : 
  Astlib.Ast_500.Parsetree.expression ->
  Astlib.Ast_500.Parsetree.attribute list ->
  Astlib.Ast_500.Parsetree.structure_itemSignature item
val psig_extension : 
  (string Astlib.Location.loc * Astlib.Ast_500.Parsetree.payload) ->
  Astlib.Ast_500.Parsetree.attribute list ->
  Astlib.Ast_500.Parsetree.signature_itemval psig_attribute : 
  Astlib.Ast_500.Parsetree.attribute ->
  Astlib.Ast_500.Parsetree.signature_itemval psig_class_type : 
  Astlib.Ast_500.Parsetree.class_type Astlib.Ast_500.Parsetree.class_infos list ->
  Astlib.Ast_500.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 : 
  Astlib.Ast_500.Parsetree.class_type Astlib.Ast_500.Parsetree.class_infos list ->
  Astlib.Ast_500.Parsetree.signature_itempsig_class constructs an Ast.signature_item_desc.Psig_class
Example OCaml
class c1 : ... and ... and cn : ...
val psig_modtypesubst : 
  Astlib.Ast_500.Parsetree.module_type_declaration ->
  Astlib.Ast_500.Parsetree.signature_itempsig_modtypesubst constructs an Ast.signature_item_desc.Psig_modtypesubst
Example OCaml
module type S :=  ...
val psig_modtype : 
  Astlib.Ast_500.Parsetree.module_type_declaration ->
  Astlib.Ast_500.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 : 
  Astlib.Ast_500.Parsetree.module_declaration list ->
  Astlib.Ast_500.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 : 
  Astlib.Ast_500.Parsetree.module_substitution ->
  Astlib.Ast_500.Parsetree.signature_itemval psig_module : 
  Astlib.Ast_500.Parsetree.module_declaration ->
  Astlib.Ast_500.Parsetree.signature_itempsig_module constructs an Ast.signature_item_desc.Psig_module
Example OCaml
module X = M and module X : MT
val psig_exception : 
  Astlib.Ast_500.Parsetree.type_exception ->
  Astlib.Ast_500.Parsetree.signature_itemval psig_typext : 
  Astlib.Ast_500.Parsetree.type_extension ->
  Astlib.Ast_500.Parsetree.signature_itemval psig_typesubst : 
  Astlib.Ast_500.Parsetree.type_declaration list ->
  Astlib.Ast_500.Parsetree.signature_itempsig_typesubst constructs an Ast.signature_item_desc.Psig_typesubst
Example OCaml
type t1 := ... and ... and tn := ...
val psig_type : 
  Astlib.Ast_500.Asttypes.rec_flag ->
  Astlib.Ast_500.Parsetree.type_declaration list ->
  Astlib.Ast_500.Parsetree.signature_itempsig_type constructs an Ast.signature_item_desc.Psig_type
Example OCaml
type t1 = ... and ... and tn  = ...
val psig_value : 
  Astlib.Ast_500.Parsetree.value_description ->
  Astlib.Ast_500.Parsetree.signature_itempsig_value constructs an Ast.signature_item_desc.Psig_value
Example OCaml
val x: Texternal x: T = "s1" ... "sn"
Row field
val rtag : 
  string Astlib.Location.loc ->
  bool ->
  Astlib.Ast_500.Parsetree.core_type list ->
  Astlib.Ast_500.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_extension : 
  (string Astlib.Location.loc * Astlib.Ast_500.Parsetree.payload) ->
  Astlib.Ast_500.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_constraint : 
  Astlib.Ast_500.Parsetree.pattern ->
  Astlib.Ast_500.Parsetree.core_type ->
  Astlib.Ast_500.Parsetree.patternval ppat_record : 
  (Astlib.Longident.t Astlib.Location.loc * Astlib.Ast_500.Parsetree.pattern)
    list ->
  Astlib.Ast_500.Asttypes.closed_flag ->
  Astlib.Ast_500.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 : 
  string ->
  Astlib.Ast_500.Parsetree.pattern option ->
  Astlib.Ast_500.Parsetree.patternppat_variant constructs an Ast.pattern_desc.Ppat_variant
Example OCaml
Ppat_variant(`A, pat) represents:
`AwhenpatisNone,`A PwhenpatisSome P
ppat_tuple constructs an Ast.pattern_desc.Ppat_tuple
Example OCaml
Patterns (P1, ..., Pn).
Invariant: n >= 2
val ppat_interval : 
  Astlib.Ast_500.Parsetree.constant ->
  Astlib.Ast_500.Parsetree.constant ->
  Astlib.Ast_500.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.
ppat_constant constructs an Ast.pattern_desc.Ppat_constant
Example OCaml
Patterns such as 1, 'a', "true", 1.0, 1l, 1L, 1n
val ppat_alias : 
  Astlib.Ast_500.Parsetree.pattern ->
  string Astlib.Location.loc ->
  Astlib.Ast_500.Parsetree.patternObject field
oinherit constructs an Ast.object_field_desc.Oinherit
val otag : 
  string Astlib.Location.loc ->
  Astlib.Ast_500.Parsetree.core_type ->
  Astlib.Ast_500.Parsetree.object_fieldotag constructs an Ast.object_field_desc.Otag
Module type declaration
val module_type_declaration : 
  name:string Astlib.Location.loc ->
  type_:Astlib.Ast_500.Parsetree.module_type option ->
  Astlib.Ast_500.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 : 
  Astlib.Longident.t Astlib.Location.loc ->
  Astlib.Ast_500.Parsetree.module_typeval pmty_extension : 
  (string Astlib.Location.loc * Astlib.Ast_500.Parsetree.payload) ->
  Astlib.Ast_500.Parsetree.module_typeval pmty_typeof : 
  Astlib.Ast_500.Parsetree.module_expr ->
  Astlib.Ast_500.Parsetree.module_typeval pmty_signature : 
  Astlib.Ast_500.Parsetree.signature_item list ->
  Astlib.Ast_500.Parsetree.module_typeval pmty_ident : 
  Astlib.Longident.t Astlib.Location.loc ->
  Astlib.Ast_500.Parsetree.module_typeModule substitution
val module_substitution : 
  name:string Astlib.Location.loc ->
  manifest:Astlib.Longident.t Astlib.Location.loc ->
  Astlib.Ast_500.Parsetree.module_substitutionmodule_substitution constructs an Ast.module_substitution
Example OCaml
Values of type module_substitution represents S := M
Module expr
val pmod_extension : 
  (string Astlib.Location.loc * Astlib.Ast_500.Parsetree.payload) ->
  Astlib.Ast_500.Parsetree.module_exprval pmod_constraint : 
  Astlib.Ast_500.Parsetree.module_expr ->
  Astlib.Ast_500.Parsetree.module_type ->
  Astlib.Ast_500.Parsetree.module_exprval pmod_structure : 
  Astlib.Ast_500.Parsetree.structure_item list ->
  Astlib.Ast_500.Parsetree.module_exprval pmod_ident : 
  Astlib.Longident.t Astlib.Location.loc ->
  Astlib.Ast_500.Parsetree.module_exprModule declaration
val module_declaration : 
  name:string option Astlib.Location.loc ->
  type_:Astlib.Ast_500.Parsetree.module_type ->
  Astlib.Ast_500.Parsetree.module_declarationmodule_declaration constructs an Ast.module_declaration
Example OCaml
Values of type module_declaration represents S : MT
Module binding
val module_binding : 
  name:string option Astlib.Location.loc ->
  expr:Astlib.Ast_500.Parsetree.module_expr ->
  Astlib.Ast_500.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_500.Parsetree.binding_op ->
  ands:Astlib.Ast_500.Parsetree.binding_op list ->
  body:Astlib.Ast_500.Parsetree.expression ->
  Astlib.Ast_500.Parsetree.letopletop constructs an Ast.letop
Label declaration
val label_declaration : 
  name:string Astlib.Location.loc ->
  mutable_:Astlib.Ast_500.Asttypes.mutable_flag ->
  type_:Astlib.Ast_500.Parsetree.core_type ->
  Astlib.Ast_500.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.
Extension constructor
val extension_constructor : 
  name:string Astlib.Location.loc ->
  kind:Astlib.Ast_500.Parsetree.extension_constructor_kind ->
  Astlib.Ast_500.Parsetree.extension_constructorextension_constructor constructs an Ast.extension_constructor
Expression
val pexp_extension : 
  (string Astlib.Location.loc * Astlib.Ast_500.Parsetree.payload) ->
  Astlib.Ast_500.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 : 
  Astlib.Ast_500.Parsetree.module_expr Astlib.Ast_500.Parsetree.open_infos ->
  Astlib.Ast_500.Parsetree.expression ->
  Astlib.Ast_500.Parsetree.expressionpexp_open constructs an Ast.expression_desc.Pexp_open
Example OCaml
M.(E)let open M in Elet open! M in E
pexp_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 : 
  string Astlib.Location.loc ->
  Astlib.Ast_500.Parsetree.expression ->
  Astlib.Ast_500.Parsetree.expressionval pexp_object : 
  Astlib.Ast_500.Parsetree.class_structure ->
  Astlib.Ast_500.Parsetree.expressionval pexp_poly : 
  Astlib.Ast_500.Parsetree.expression ->
  Astlib.Ast_500.Parsetree.core_type option ->
  Astlib.Ast_500.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).
pexp_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 : 
  Astlib.Ast_500.Parsetree.extension_constructor ->
  Astlib.Ast_500.Parsetree.expression ->
  Astlib.Ast_500.Parsetree.expressionpexp_letexception constructs an Ast.expression_desc.Pexp_letexception
Example OCaml
let exception C in E
val pexp_letmodule : 
  string option Astlib.Location.loc ->
  Astlib.Ast_500.Parsetree.module_expr ->
  Astlib.Ast_500.Parsetree.expression ->
  Astlib.Ast_500.Parsetree.expressionval pexp_override : 
  (string Astlib.Location.loc * Astlib.Ast_500.Parsetree.expression) list ->
  Astlib.Ast_500.Parsetree.expressionpexp_override constructs an Ast.expression_desc.Pexp_override
Example OCaml
{< x1 = E1; ...; xn = En >}
val pexp_setinstvar : 
  string Astlib.Location.loc ->
  Astlib.Ast_500.Parsetree.expression ->
  Astlib.Ast_500.Parsetree.expressionval pexp_send : 
  Astlib.Ast_500.Parsetree.expression ->
  string Astlib.Location.loc ->
  Astlib.Ast_500.Parsetree.expressionval pexp_coerce : 
  Astlib.Ast_500.Parsetree.expression ->
  Astlib.Ast_500.Parsetree.core_type option ->
  Astlib.Ast_500.Parsetree.core_type ->
  Astlib.Ast_500.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 : 
  Astlib.Ast_500.Parsetree.expression ->
  Astlib.Ast_500.Parsetree.core_type ->
  Astlib.Ast_500.Parsetree.expressionval pexp_for : 
  Astlib.Ast_500.Parsetree.pattern ->
  Astlib.Ast_500.Parsetree.expression ->
  Astlib.Ast_500.Parsetree.expression ->
  Astlib.Ast_500.Asttypes.direction_flag ->
  Astlib.Ast_500.Parsetree.expression ->
  Astlib.Ast_500.Parsetree.expressionpexp_for constructs an Ast.expression_desc.Pexp_for
Example OCaml
Pexp_for(i, E1, E2, direction, E3) represents:
val pexp_sequence : 
  Astlib.Ast_500.Parsetree.expression ->
  Astlib.Ast_500.Parsetree.expression ->
  Astlib.Ast_500.Parsetree.expressionval pexp_ifthenelse : 
  Astlib.Ast_500.Parsetree.expression ->
  Astlib.Ast_500.Parsetree.expression ->
  Astlib.Ast_500.Parsetree.expression option ->
  Astlib.Ast_500.Parsetree.expressionval pexp_array : 
  Astlib.Ast_500.Parsetree.expression list ->
  Astlib.Ast_500.Parsetree.expressionval pexp_record : 
  (Astlib.Longident.t Astlib.Location.loc * Astlib.Ast_500.Parsetree.expression)
    list ->
  Astlib.Ast_500.Parsetree.expression option ->
  Astlib.Ast_500.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 : 
  string ->
  Astlib.Ast_500.Parsetree.expression option ->
  Astlib.Ast_500.Parsetree.expressionpexp_variant constructs an Ast.expression_desc.Pexp_variant
Example OCaml
Pexp_variant(`A, exp) represents
`AwhenexpisNone`A EwhenexpisSome E
val pexp_construct : 
  Astlib.Longident.t Astlib.Location.loc ->
  Astlib.Ast_500.Parsetree.expression option ->
  Astlib.Ast_500.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 : 
  Astlib.Ast_500.Parsetree.expression list ->
  Astlib.Ast_500.Parsetree.expressionpexp_tuple constructs an Ast.expression_desc.Pexp_tuple
Example OCaml
Expressions (E1, ..., En)
Invariant: n >= 2
val pexp_try : 
  Astlib.Ast_500.Parsetree.expression ->
  Astlib.Ast_500.Parsetree.case list ->
  Astlib.Ast_500.Parsetree.expressionpexp_try constructs an Ast.expression_desc.Pexp_try
Example OCaml
try E0 with P1 -> E1 | ... | Pn -> En
val pexp_match : 
  Astlib.Ast_500.Parsetree.expression ->
  Astlib.Ast_500.Parsetree.case list ->
  Astlib.Ast_500.Parsetree.expressionpexp_match constructs an Ast.expression_desc.Pexp_match
Example OCaml
match E0 with P1 -> E1 | ... | Pn -> En
val pexp_apply : 
  Astlib.Ast_500.Parsetree.expression ->
  (Astlib.Ast_500.Asttypes.arg_label * Astlib.Ast_500.Parsetree.expression)
    list ->
  Astlib.Ast_500.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_fun : 
  Astlib.Ast_500.Asttypes.arg_label ->
  Astlib.Ast_500.Parsetree.expression option ->
  Astlib.Ast_500.Parsetree.pattern ->
  Astlib.Ast_500.Parsetree.expression ->
  Astlib.Ast_500.Parsetree.expressionpexp_fun constructs an Ast.expression_desc.Pexp_fun
Example OCaml
Pexp_fun(lbl, exp0, P, E1) represents:
fun P -> E1whenlblisNolabelandexp0isNonefun ~l:P -> E1whenlblisLabelled landexp0isNonefun ?l:P -> E1whenlblisOptional landexp0isNonefun ?l:(P = E0) -> E1whenlblisOptional landexp0isSome E0
Notes:
pexp_function constructs an Ast.expression_desc.Pexp_function
Example OCaml
function P1 -> E1 | ... | Pn -> En
val pexp_let : 
  Astlib.Ast_500.Asttypes.rec_flag ->
  Astlib.Ast_500.Parsetree.value_binding list ->
  Astlib.Ast_500.Parsetree.expression ->
  Astlib.Ast_500.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.
pexp_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 : 
  Astlib.Longident.t Astlib.Location.loc ->
  Astlib.Ast_500.Parsetree.expressionDirective argument
pdir_bool constructs an Ast.directive_argument_desc.Pdir_bool
pdir_ident constructs an Ast.directive_argument_desc.Pdir_ident
pdir_int constructs an Ast.directive_argument_desc.Pdir_int
pdir_string constructs an Ast.directive_argument_desc.Pdir_string
Core type
val ptyp_extension : 
  (string Astlib.Location.loc * Astlib.Ast_500.Parsetree.payload) ->
  Astlib.Ast_500.Parsetree.core_typeval ptyp_package : 
  (Astlib.Longident.t Astlib.Location.loc
   * (Astlib.Longident.t Astlib.Location.loc
      * Astlib.Ast_500.Parsetree.core_type)
       list) ->
  Astlib.Ast_500.Parsetree.core_typeval ptyp_poly : 
  string Astlib.Location.loc list ->
  Astlib.Ast_500.Parsetree.core_type ->
  Astlib.Ast_500.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 : 
  Astlib.Ast_500.Parsetree.row_field list ->
  Astlib.Ast_500.Asttypes.closed_flag ->
  string list option ->
  Astlib.Ast_500.Parsetree.core_typeptyp_variant constructs an Ast.core_type_desc.Ptyp_variant
Example OCaml
Ptyp_variant([`A;`B], flag, labels) represents:
val ptyp_alias : 
  Astlib.Ast_500.Parsetree.core_type ->
  string ->
  Astlib.Ast_500.Parsetree.core_typeval ptyp_class : 
  Astlib.Longident.t Astlib.Location.loc ->
  Astlib.Ast_500.Parsetree.core_type list ->
  Astlib.Ast_500.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 : 
  Astlib.Ast_500.Parsetree.object_field list ->
  Astlib.Ast_500.Asttypes.closed_flag ->
  Astlib.Ast_500.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 : 
  Astlib.Longident.t Astlib.Location.loc ->
  Astlib.Ast_500.Parsetree.core_type list ->
  Astlib.Ast_500.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 : 
  Astlib.Ast_500.Parsetree.core_type list ->
  Astlib.Ast_500.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 : 
  Astlib.Ast_500.Asttypes.arg_label ->
  Astlib.Ast_500.Parsetree.core_type ->
  Astlib.Ast_500.Parsetree.core_type ->
  Astlib.Ast_500.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 : 
  (string Astlib.Location.loc * Astlib.Ast_500.Parsetree.payload) ->
  Astlib.Ast_500.Parsetree.class_type_fieldval pctf_attribute : 
  Astlib.Ast_500.Parsetree.attribute ->
  Astlib.Ast_500.Parsetree.class_type_fieldval pctf_constraint : 
  (Astlib.Ast_500.Parsetree.core_type * Astlib.Ast_500.Parsetree.core_type) ->
  Astlib.Ast_500.Parsetree.class_type_fieldpctf_constraint constructs an Ast.class_type_field_desc.Pctf_constraint
Example OCaml
constraint T1 = T2
val pctf_method : 
  (string Astlib.Location.loc
   * Astlib.Ast_500.Asttypes.private_flag
   * Astlib.Ast_500.Asttypes.virtual_flag
   * Astlib.Ast_500.Parsetree.core_type) ->
  Astlib.Ast_500.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 : 
  Astlib.Ast_500.Parsetree.class_type ->
  Astlib.Ast_500.Parsetree.class_type_fieldClass type
val pcty_extension : 
  (string Astlib.Location.loc * Astlib.Ast_500.Parsetree.payload) ->
  Astlib.Ast_500.Parsetree.class_typeval pcty_arrow : 
  Astlib.Ast_500.Asttypes.arg_label ->
  Astlib.Ast_500.Parsetree.core_type ->
  Astlib.Ast_500.Parsetree.class_type ->
  Astlib.Ast_500.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 : 
  Astlib.Ast_500.Parsetree.class_signature ->
  Astlib.Ast_500.Parsetree.class_typeval pcty_constr : 
  Astlib.Longident.t Astlib.Location.loc ->
  Astlib.Ast_500.Parsetree.core_type list ->
  Astlib.Ast_500.Parsetree.class_typeClass structure
val class_structure : 
  self:Astlib.Ast_500.Parsetree.pattern ->
  fields:Astlib.Ast_500.Parsetree.class_field list ->
  Astlib.Ast_500.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_500.Parsetree.core_type ->
  fields:Astlib.Ast_500.Parsetree.class_type_field list ->
  Astlib.Ast_500.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 : 
  (string Astlib.Location.loc * Astlib.Ast_500.Parsetree.payload) ->
  Astlib.Ast_500.Parsetree.class_fieldval pcf_attribute : 
  Astlib.Ast_500.Parsetree.attribute ->
  Astlib.Ast_500.Parsetree.class_fieldval pcf_initializer : 
  Astlib.Ast_500.Parsetree.expression ->
  Astlib.Ast_500.Parsetree.class_fieldval pcf_constraint : 
  (Astlib.Ast_500.Parsetree.core_type * Astlib.Ast_500.Parsetree.core_type) ->
  Astlib.Ast_500.Parsetree.class_fieldval pcf_method : 
  (string Astlib.Location.loc
   * Astlib.Ast_500.Asttypes.private_flag
   * Astlib.Ast_500.Parsetree.class_field_kind) ->
  Astlib.Ast_500.Parsetree.class_fieldpcf_method constructs an Ast.class_field_desc.Pcf_method
Example OCaml
val pcf_val : 
  (string Astlib.Location.loc
   * Astlib.Ast_500.Asttypes.mutable_flag
   * Astlib.Ast_500.Parsetree.class_field_kind) ->
  Astlib.Ast_500.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 : 
  Astlib.Ast_500.Asttypes.override_flag ->
  Astlib.Ast_500.Parsetree.class_expr ->
  string Astlib.Location.loc option ->
  Astlib.Ast_500.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 : 
  (string Astlib.Location.loc * Astlib.Ast_500.Parsetree.payload) ->
  Astlib.Ast_500.Parsetree.class_exprval pcl_constraint : 
  Astlib.Ast_500.Parsetree.class_expr ->
  Astlib.Ast_500.Parsetree.class_type ->
  Astlib.Ast_500.Parsetree.class_exprval pcl_let : 
  Astlib.Ast_500.Asttypes.rec_flag ->
  Astlib.Ast_500.Parsetree.value_binding list ->
  Astlib.Ast_500.Parsetree.class_expr ->
  Astlib.Ast_500.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 : 
  Astlib.Ast_500.Parsetree.class_expr ->
  (Astlib.Ast_500.Asttypes.arg_label * Astlib.Ast_500.Parsetree.expression)
    list ->
  Astlib.Ast_500.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 : 
  Astlib.Ast_500.Asttypes.arg_label ->
  Astlib.Ast_500.Parsetree.expression option ->
  Astlib.Ast_500.Parsetree.pattern ->
  Astlib.Ast_500.Parsetree.class_expr ->
  Astlib.Ast_500.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 : 
  Astlib.Ast_500.Parsetree.class_structure ->
  Astlib.Ast_500.Parsetree.class_exprval pcl_constr : 
  Astlib.Longident.t Astlib.Location.loc ->
  Astlib.Ast_500.Parsetree.core_type list ->
  Astlib.Ast_500.Parsetree.class_exprCase
val case : 
  lhs:Astlib.Ast_500.Parsetree.pattern ->
  guard:Astlib.Ast_500.Parsetree.expression option ->
  rhs:Astlib.Ast_500.Parsetree.expression ->
  Astlib.Ast_500.Parsetree.caseBinding op
val binding_op : 
  op:string Astlib.Location.loc ->
  pat:Astlib.Ast_500.Parsetree.pattern ->
  exp:Astlib.Ast_500.Parsetree.expression ->
  Astlib.Ast_500.Parsetree.binding_opbinding_op constructs an Ast.binding_op
Attribute
val attribute : 
  name:string Astlib.Location.loc ->
  payload:Astlib.Ast_500.Parsetree.payload ->
  Astlib.Ast_500.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 : 
  expr:'a ->
  override:Astlib.Ast_500.Asttypes.override_flag ->
  'a Astlib.Ast_500.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 : 
  virt:Astlib.Ast_500.Asttypes.virtual_flag ->
  params:
    (Astlib.Ast_500.Parsetree.core_type
     * (Astlib.Ast_500.Asttypes.variance * Astlib.Ast_500.Asttypes.injectivity))
      list ->
  name:string Astlib.Location.loc ->
  expr:'a ->
  'a Astlib.Ast_500.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.
evar 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 : 
  Astlib.Ast_500.Parsetree.expression ->
  Astlib.Ast_500.Parsetree.expression list ->
  Astlib.Ast_500.Parsetree.expressionSame as pexp_apply but without labels
val eabstract : 
  Astlib.Ast_500.Parsetree.pattern list ->
  Astlib.Ast_500.Parsetree.expression ->
  Astlib.Ast_500.Parsetree.expressionval esequence : 
  Astlib.Ast_500.Parsetree.expression list ->
  Astlib.Ast_500.Parsetree.expressionval ppat_tuple_opt : 
  Astlib.Ast_500.Parsetree.pattern list ->
  Astlib.Ast_500.Parsetree.pattern optionval pexp_tuple_opt : 
  Astlib.Ast_500.Parsetree.expression list ->
  Astlib.Ast_500.Parsetree.expression optionval pconstruct : 
  Astlib.Ast_500.Parsetree.constructor_declaration ->
  Astlib.Ast_500.Parsetree.pattern option ->
  Astlib.Ast_500.Parsetree.patternval econstruct : 
  Astlib.Ast_500.Parsetree.constructor_declaration ->
  Astlib.Ast_500.Parsetree.expression option ->
  Astlib.Ast_500.Parsetree.expressionval elist_tail : 
  Astlib.Ast_500.Parsetree.expression list ->
  Astlib.Ast_500.Parsetree.expression ->
  Astlib.Ast_500.Parsetree.expressionelist_tail ~loc [expr1; expr2; expr3] expr_tail produces the expression expr1::expr2::expr3::expr_tail.
elist ~loc [expr1; expr2; expr3] produces the list litteral expression [expr1; expr2; expr3].
val plist_tail : 
  Astlib.Ast_500.Parsetree.pattern list ->
  Astlib.Ast_500.Parsetree.pattern ->
  Astlib.Ast_500.Parsetree.patternplist_tail ~loc [pat1; pat2; pat3] pat_tail produces the pattern pat1::pat2::pat3::pat_tail.
plist ~loc [pat1; pat2; pat3] produces the list pattern [pat1; pat2; pat3].
val pstr_value_list : 
  loc:Location.t ->
  Ppxlib_ast.Asttypes.rec_flag ->
  Astlib.Ast_500.Parsetree.value_binding list ->
  Astlib.Ast_500.Parsetree.structure_item listpstr_value_list ~loc rf vbs = pstr_value ~loc rf vbs if vbs <> [], [] otherwise.
val nonrec_type_declaration : 
  name:string Loc.t ->
  params:
    (Astlib.Ast_500.Parsetree.core_type * Ppxlib_ast.Asttypes.variance) list ->
  cstrs:
    (Astlib.Ast_500.Parsetree.core_type
     * Astlib.Ast_500.Parsetree.core_type
     * Location.t)
      list ->
  kind:Astlib.Ast_500.Parsetree.type_kind ->
  private_:Ppxlib_ast.Asttypes.private_flag ->
  manifest:Astlib.Ast_500.Parsetree.core_type option ->
  Astlib.Ast_500.Parsetree.type_declarationval unapplied_type_constr_conv : 
  Longident.t Loc.t ->
  f:(string -> string) ->
  Astlib.Ast_500.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 : 
  Longident.t Loc.t ->
  f:(string -> string) ->
  Astlib.Ast_500.Parsetree.expression list ->
  Astlib.Ast_500.Parsetree.expressionval eta_reduce : 
  Astlib.Ast_500.Parsetree.expression ->
  Astlib.Ast_500.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_500.Parsetree.expression ->
  Astlib.Ast_500.Parsetree.expressionval eta_reduce_if_possible_and_nonrec : 
  Astlib.Ast_500.Parsetree.expression ->
  rec_flag:Astlib.Ast_500.Asttypes.rec_flag ->
  Astlib.Ast_500.Parsetree.expressionThis 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 : 
  Astlib.Longident.t Astlib.Location.loc ->
  Astlib.Ast_500.Parsetree.pattern option ->
  Astlib.Ast_500.Parsetree.patternval constructor_declaration : 
  name:string Astlib.Location.loc ->
  args:Astlib.Ast_500.Parsetree.constructor_arguments ->
  res:Astlib.Ast_500.Parsetree.core_type option ->
  Astlib.Ast_500.Parsetree.constructor_declaration- Parameters
 - 
        
          Signature
        
          
          
- 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
 - 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