Module Ppxlib__Ast_builder.Make
Build Ast helpers with the location argument factorized.
Parameters
Signature
module Located : Ppxlib__.Ast_builder_intf.Located with type 'a with_loc := 'a Ppxlib__.Ast_builder_intf.without_locationinclude module type of sig ... end
val loc : Ppxlib.Location.tval attribute : name:string Ppxlib__.Import.loc -> payload:Ppxlib__.Import.payload -> Ppxlib__.Import.attributeval binding_op : op:string Ppxlib__.Import.loc -> pat:Ppxlib__.Import.pattern -> exp:Ppxlib__.Import.expression -> Ppxlib__.Import.binding_opval case : lhs:Ppxlib__.Import.pattern -> guard:Ppxlib__.Import.expression option -> rhs:Ppxlib__.Import.expression -> Ppxlib__.Import.caseval pcl_constr : Ppxlib__.Import.longident_loc -> Ppxlib__.Import.core_type list -> Ppxlib__.Import.class_exprval pcl_structure : Ppxlib__.Import.class_structure -> Ppxlib__.Import.class_exprval pcl_fun : Ppxlib__.Import.arg_label -> Ppxlib__.Import.expression option -> Ppxlib__.Import.pattern -> Ppxlib__.Import.class_expr -> Ppxlib__.Import.class_exprval pcl_apply : Ppxlib__.Import.class_expr -> (Ppxlib__.Import.arg_label * Ppxlib__.Import.expression) list -> Ppxlib__.Import.class_exprval pcl_let : Ppxlib__.Import.rec_flag -> Ppxlib__.Import.value_binding list -> Ppxlib__.Import.class_expr -> Ppxlib__.Import.class_exprval pcl_constraint : Ppxlib__.Import.class_expr -> Ppxlib__.Import.class_type -> Ppxlib__.Import.class_exprval pcl_extension : Ppxlib__.Import.extension -> Ppxlib__.Import.class_exprval pcl_open : Ppxlib__.Import.open_description -> Ppxlib__.Import.class_expr -> Ppxlib__.Import.class_exprval pcf_inherit : Ppxlib__.Import.override_flag -> Ppxlib__.Import.class_expr -> string Ppxlib__.Import.loc option -> Ppxlib__.Import.class_fieldval pcf_val : (Ppxlib__.Import.label Ppxlib__.Import.loc * Ppxlib__.Import.mutable_flag * Ppxlib__.Import.class_field_kind) -> Ppxlib__.Import.class_fieldval pcf_method : (Ppxlib__.Import.label Ppxlib__.Import.loc * Ppxlib__.Import.private_flag * Ppxlib__.Import.class_field_kind) -> Ppxlib__.Import.class_fieldval pcf_constraint : (Ppxlib__.Import.core_type * Ppxlib__.Import.core_type) -> Ppxlib__.Import.class_fieldval pcf_initializer : Ppxlib__.Import.expression -> Ppxlib__.Import.class_fieldval pcf_attribute : Ppxlib__.Import.attribute -> Ppxlib__.Import.class_fieldval pcf_extension : Ppxlib__.Import.extension -> Ppxlib__.Import.class_fieldval class_infos : virt:Ppxlib__.Import.virtual_flag -> params:(Ppxlib__.Import.core_type * Ppxlib__.Import.variance) list -> name:string Ppxlib__.Import.loc -> expr:'a -> 'a Ppxlib__.Import.class_infosval class_signature : self:Ppxlib__.Import.core_type -> fields:Ppxlib__.Import.class_type_field list -> Ppxlib__.Import.class_signatureval class_structure : self:Ppxlib__.Import.pattern -> fields:Ppxlib__.Import.class_field list -> Ppxlib__.Import.class_structureval pcty_constr : Ppxlib__.Import.longident_loc -> Ppxlib__.Import.core_type list -> Ppxlib__.Import.class_typeval pcty_signature : Ppxlib__.Import.class_signature -> Ppxlib__.Import.class_typeval pcty_arrow : Ppxlib__.Import.arg_label -> Ppxlib__.Import.core_type -> Ppxlib__.Import.class_type -> Ppxlib__.Import.class_typeval pcty_extension : Ppxlib__.Import.extension -> Ppxlib__.Import.class_typeval pcty_open : Ppxlib__.Import.open_description -> Ppxlib__.Import.class_type -> Ppxlib__.Import.class_typeval pctf_inherit : Ppxlib__.Import.class_type -> Ppxlib__.Import.class_type_fieldval pctf_val : (Ppxlib__.Import.label Ppxlib__.Import.loc * Ppxlib__.Import.mutable_flag * Ppxlib__.Import.virtual_flag * Ppxlib__.Import.core_type) -> Ppxlib__.Import.class_type_fieldval pctf_method : (Ppxlib__.Import.label Ppxlib__.Import.loc * Ppxlib__.Import.private_flag * Ppxlib__.Import.virtual_flag * Ppxlib__.Import.core_type) -> Ppxlib__.Import.class_type_fieldval pctf_constraint : (Ppxlib__.Import.core_type * Ppxlib__.Import.core_type) -> Ppxlib__.Import.class_type_fieldval pctf_attribute : Ppxlib__.Import.attribute -> Ppxlib__.Import.class_type_fieldval pctf_extension : Ppxlib__.Import.extension -> Ppxlib__.Import.class_type_fieldval constructor_declaration : name:string Ppxlib__.Import.loc -> args:Ppxlib__.Import.constructor_arguments -> res:Ppxlib__.Import.core_type option -> Ppxlib__.Import.constructor_declarationval ptyp_any : Ppxlib__.Import.core_typeval ptyp_var : string -> Ppxlib__.Import.core_typeval ptyp_arrow : Ppxlib__.Import.arg_label -> Ppxlib__.Import.core_type -> Ppxlib__.Import.core_type -> Ppxlib__.Import.core_typeval ptyp_tuple : Ppxlib__.Import.core_type list -> Ppxlib__.Import.core_typeval ptyp_constr : Ppxlib__.Import.longident_loc -> Ppxlib__.Import.core_type list -> Ppxlib__.Import.core_typeval ptyp_object : Ppxlib__.Import.object_field list -> Ppxlib__.Import.closed_flag -> Ppxlib__.Import.core_typeval ptyp_class : Ppxlib__.Import.longident_loc -> Ppxlib__.Import.core_type list -> Ppxlib__.Import.core_typeval ptyp_alias : Ppxlib__.Import.core_type -> string -> Ppxlib__.Import.core_typeval ptyp_variant : Ppxlib__.Import.row_field list -> Ppxlib__.Import.closed_flag -> Ppxlib__.Import.label list option -> Ppxlib__.Import.core_typeval ptyp_poly : string Ppxlib__.Import.loc list -> Ppxlib__.Import.core_type -> Ppxlib__.Import.core_typeval ptyp_package : Ppxlib__.Import.package_type -> Ppxlib__.Import.core_typeval ptyp_extension : Ppxlib__.Import.extension -> Ppxlib__.Import.core_typeval pdir_string : string -> Ppxlib__.Import.directive_argumentval pdir_int : string -> char option -> Ppxlib__.Import.directive_argumentval pdir_ident : Ppxlib__.Import.longident -> Ppxlib__.Import.directive_argumentval pdir_bool : bool -> Ppxlib__.Import.directive_argumentval pexp_ident : Ppxlib__.Import.longident_loc -> Ppxlib__.Import.expressionval pexp_constant : Ppxlib__.Import.constant -> Ppxlib__.Import.expressionval pexp_let : Ppxlib__.Import.rec_flag -> Ppxlib__.Import.value_binding list -> Ppxlib__.Import.expression -> Ppxlib__.Import.expressionval pexp_function : Ppxlib__.Import.case list -> Ppxlib__.Import.expressionval pexp_fun : Ppxlib__.Import.arg_label -> Ppxlib__.Import.expression option -> Ppxlib__.Import.pattern -> Ppxlib__.Import.expression -> Ppxlib__.Import.expressionval pexp_apply : Ppxlib__.Import.expression -> (Ppxlib__.Import.arg_label * Ppxlib__.Import.expression) list -> Ppxlib__.Import.expressionval pexp_match : Ppxlib__.Import.expression -> Ppxlib__.Import.case list -> Ppxlib__.Import.expressionval pexp_try : Ppxlib__.Import.expression -> Ppxlib__.Import.case list -> Ppxlib__.Import.expressionval pexp_tuple : Ppxlib__.Import.expression list -> Ppxlib__.Import.expressionval pexp_construct : Ppxlib__.Import.longident_loc -> Ppxlib__.Import.expression option -> Ppxlib__.Import.expressionval pexp_variant : Ppxlib__.Import.label -> Ppxlib__.Import.expression option -> Ppxlib__.Import.expressionval pexp_record : (Ppxlib__.Import.longident_loc * Ppxlib__.Import.expression) list -> Ppxlib__.Import.expression option -> Ppxlib__.Import.expressionval pexp_field : Ppxlib__.Import.expression -> Ppxlib__.Import.longident_loc -> Ppxlib__.Import.expressionval pexp_setfield : Ppxlib__.Import.expression -> Ppxlib__.Import.longident_loc -> Ppxlib__.Import.expression -> Ppxlib__.Import.expressionval pexp_array : Ppxlib__.Import.expression list -> Ppxlib__.Import.expressionval pexp_ifthenelse : Ppxlib__.Import.expression -> Ppxlib__.Import.expression -> Ppxlib__.Import.expression option -> Ppxlib__.Import.expressionval pexp_sequence : Ppxlib__.Import.expression -> Ppxlib__.Import.expression -> Ppxlib__.Import.expressionval pexp_while : Ppxlib__.Import.expression -> Ppxlib__.Import.expression -> Ppxlib__.Import.expressionval pexp_for : Ppxlib__.Import.pattern -> Ppxlib__.Import.expression -> Ppxlib__.Import.expression -> Ppxlib__.Import.direction_flag -> Ppxlib__.Import.expression -> Ppxlib__.Import.expressionval pexp_constraint : Ppxlib__.Import.expression -> Ppxlib__.Import.core_type -> Ppxlib__.Import.expressionval pexp_coerce : Ppxlib__.Import.expression -> Ppxlib__.Import.core_type option -> Ppxlib__.Import.core_type -> Ppxlib__.Import.expressionval pexp_send : Ppxlib__.Import.expression -> Ppxlib__.Import.label Ppxlib__.Import.loc -> Ppxlib__.Import.expressionval pexp_new : Ppxlib__.Import.longident_loc -> Ppxlib__.Import.expressionval pexp_setinstvar : Ppxlib__.Import.label Ppxlib__.Import.loc -> Ppxlib__.Import.expression -> Ppxlib__.Import.expressionval pexp_override : (Ppxlib__.Import.label Ppxlib__.Import.loc * Ppxlib__.Import.expression) list -> Ppxlib__.Import.expressionval pexp_letmodule : string option Ppxlib__.Import.loc -> Ppxlib__.Import.module_expr -> Ppxlib__.Import.expression -> Ppxlib__.Import.expressionval pexp_letexception : Ppxlib__.Import.extension_constructor -> Ppxlib__.Import.expression -> Ppxlib__.Import.expressionval pexp_assert : Ppxlib__.Import.expression -> Ppxlib__.Import.expressionval pexp_lazy : Ppxlib__.Import.expression -> Ppxlib__.Import.expressionval pexp_poly : Ppxlib__.Import.expression -> Ppxlib__.Import.core_type option -> Ppxlib__.Import.expressionval pexp_object : Ppxlib__.Import.class_structure -> Ppxlib__.Import.expressionval pexp_newtype : string Ppxlib__.Import.loc -> Ppxlib__.Import.expression -> Ppxlib__.Import.expressionval pexp_pack : Ppxlib__.Import.module_expr -> Ppxlib__.Import.expressionval pexp_open : Ppxlib__.Import.open_declaration -> Ppxlib__.Import.expression -> Ppxlib__.Import.expressionval pexp_letop : Ppxlib__.Import.letop -> Ppxlib__.Import.expressionval pexp_extension : Ppxlib__.Import.extension -> Ppxlib__.Import.expressionval pexp_unreachable : Ppxlib__.Import.expressionval extension_constructor : name:string Ppxlib__.Import.loc -> kind:Ppxlib__.Import.extension_constructor_kind -> Ppxlib__.Import.extension_constructorval include_infos : 'a -> 'a Ppxlib__.Import.include_infosval label_declaration : name:string Ppxlib__.Import.loc -> mutable_:Ppxlib__.Import.mutable_flag -> type_:Ppxlib__.Import.core_type -> Ppxlib__.Import.label_declarationval letop : let_:Ppxlib__.Import.binding_op -> ands:Ppxlib__.Import.binding_op list -> body:Ppxlib__.Import.expression -> Ppxlib__.Import.letopval location : start:Ppxlib__.Import.position -> end_:Ppxlib__.Import.position -> ghost:bool -> Ppxlib__.Import.locationval module_binding : name:string option Ppxlib__.Import.loc -> expr:Ppxlib__.Import.module_expr -> Ppxlib__.Import.module_bindingval module_declaration : name:string option Ppxlib__.Import.loc -> type_:Ppxlib__.Import.module_type -> Ppxlib__.Import.module_declarationval pmod_ident : Ppxlib__.Import.longident_loc -> Ppxlib__.Import.module_exprval pmod_structure : Ppxlib__.Import.structure -> Ppxlib__.Import.module_exprval pmod_functor : Ppxlib__.Import.functor_parameter -> Ppxlib__.Import.module_expr -> Ppxlib__.Import.module_exprval pmod_apply : Ppxlib__.Import.module_expr -> Ppxlib__.Import.module_expr -> Ppxlib__.Import.module_exprval pmod_constraint : Ppxlib__.Import.module_expr -> Ppxlib__.Import.module_type -> Ppxlib__.Import.module_exprval pmod_unpack : Ppxlib__.Import.expression -> Ppxlib__.Import.module_exprval pmod_extension : Ppxlib__.Import.extension -> Ppxlib__.Import.module_exprval module_substitution : name:string Ppxlib__.Import.loc -> manifest:Ppxlib__.Import.longident_loc -> Ppxlib__.Import.module_substitutionval pmty_ident : Ppxlib__.Import.longident_loc -> Ppxlib__.Import.module_typeval pmty_signature : Ppxlib__.Import.signature -> Ppxlib__.Import.module_typeval pmty_functor : Ppxlib__.Import.functor_parameter -> Ppxlib__.Import.module_type -> Ppxlib__.Import.module_typeval pmty_with : Ppxlib__.Import.module_type -> Ppxlib__.Import.with_constraint list -> Ppxlib__.Import.module_typeval pmty_typeof : Ppxlib__.Import.module_expr -> Ppxlib__.Import.module_typeval pmty_extension : Ppxlib__.Import.extension -> Ppxlib__.Import.module_typeval pmty_alias : Ppxlib__.Import.longident_loc -> Ppxlib__.Import.module_typeval module_type_declaration : name:string Ppxlib__.Import.loc -> type_:Ppxlib__.Import.module_type option -> Ppxlib__.Import.module_type_declarationval otag : Ppxlib__.Import.label Ppxlib__.Import.loc -> Ppxlib__.Import.core_type -> Ppxlib__.Import.object_fieldval oinherit : Ppxlib__.Import.core_type -> Ppxlib__.Import.object_fieldval open_infos : expr:'a -> override:Ppxlib__.Import.override_flag -> 'a Ppxlib__.Import.open_infosval ppat_any : Ppxlib__.Import.patternval ppat_var : string Ppxlib__.Import.loc -> Ppxlib__.Import.patternval ppat_alias : Ppxlib__.Import.pattern -> string Ppxlib__.Import.loc -> Ppxlib__.Import.patternval ppat_constant : Ppxlib__.Import.constant -> Ppxlib__.Import.patternval ppat_interval : Ppxlib__.Import.constant -> Ppxlib__.Import.constant -> Ppxlib__.Import.patternval ppat_tuple : Ppxlib__.Import.pattern list -> Ppxlib__.Import.patternval ppat_construct : Ppxlib__.Import.longident_loc -> Ppxlib__.Import.pattern option -> Ppxlib__.Import.patternval ppat_variant : Ppxlib__.Import.label -> Ppxlib__.Import.pattern option -> Ppxlib__.Import.patternval ppat_record : (Ppxlib__.Import.longident_loc * Ppxlib__.Import.pattern) list -> Ppxlib__.Import.closed_flag -> Ppxlib__.Import.patternval ppat_array : Ppxlib__.Import.pattern list -> Ppxlib__.Import.patternval ppat_or : Ppxlib__.Import.pattern -> Ppxlib__.Import.pattern -> Ppxlib__.Import.patternval ppat_constraint : Ppxlib__.Import.pattern -> Ppxlib__.Import.core_type -> Ppxlib__.Import.patternval ppat_type : Ppxlib__.Import.longident_loc -> Ppxlib__.Import.patternval ppat_lazy : Ppxlib__.Import.pattern -> Ppxlib__.Import.patternval ppat_unpack : string option Ppxlib__.Import.loc -> Ppxlib__.Import.patternval ppat_exception : Ppxlib__.Import.pattern -> Ppxlib__.Import.patternval ppat_extension : Ppxlib__.Import.extension -> Ppxlib__.Import.patternval ppat_open : Ppxlib__.Import.longident_loc -> Ppxlib__.Import.pattern -> Ppxlib__.Import.patternval position : fname:string -> lnum:int -> bol:int -> cnum:int -> Ppxlib__.Import.positionval rtag : Ppxlib__.Import.label Ppxlib__.Import.loc -> bool -> Ppxlib__.Import.core_type list -> Ppxlib__.Import.row_fieldval rinherit : Ppxlib__.Import.core_type -> Ppxlib__.Import.row_fieldval psig_value : Ppxlib__.Import.value_description -> Ppxlib__.Import.signature_itemval psig_type : Ppxlib__.Import.rec_flag -> Ppxlib__.Import.type_declaration list -> Ppxlib__.Import.signature_itemval psig_typesubst : Ppxlib__.Import.type_declaration list -> Ppxlib__.Import.signature_itemval psig_typext : Ppxlib__.Import.type_extension -> Ppxlib__.Import.signature_itemval psig_exception : Ppxlib__.Import.type_exception -> Ppxlib__.Import.signature_itemval psig_module : Ppxlib__.Import.module_declaration -> Ppxlib__.Import.signature_itemval psig_modsubst : Ppxlib__.Import.module_substitution -> Ppxlib__.Import.signature_itemval psig_recmodule : Ppxlib__.Import.module_declaration list -> Ppxlib__.Import.signature_itemval psig_modtype : Ppxlib__.Import.module_type_declaration -> Ppxlib__.Import.signature_itemval psig_open : Ppxlib__.Import.open_description -> Ppxlib__.Import.signature_itemval psig_include : Ppxlib__.Import.include_description -> Ppxlib__.Import.signature_itemval psig_class : Ppxlib__.Import.class_description list -> Ppxlib__.Import.signature_itemval psig_class_type : Ppxlib__.Import.class_type_declaration list -> Ppxlib__.Import.signature_itemval psig_attribute : Ppxlib__.Import.attribute -> Ppxlib__.Import.signature_itemval psig_extension : Ppxlib__.Import.extension -> Ppxlib__.Import.attributes -> Ppxlib__.Import.signature_itemval pstr_eval : Ppxlib__.Import.expression -> Ppxlib__.Import.attributes -> Ppxlib__.Import.structure_itemval pstr_value : Ppxlib__.Import.rec_flag -> Ppxlib__.Import.value_binding list -> Ppxlib__.Import.structure_itemval pstr_primitive : Ppxlib__.Import.value_description -> Ppxlib__.Import.structure_itemval pstr_type : Ppxlib__.Import.rec_flag -> Ppxlib__.Import.type_declaration list -> Ppxlib__.Import.structure_itemval pstr_typext : Ppxlib__.Import.type_extension -> Ppxlib__.Import.structure_itemval pstr_exception : Ppxlib__.Import.type_exception -> Ppxlib__.Import.structure_itemval pstr_module : Ppxlib__.Import.module_binding -> Ppxlib__.Import.structure_itemval pstr_recmodule : Ppxlib__.Import.module_binding list -> Ppxlib__.Import.structure_itemval pstr_modtype : Ppxlib__.Import.module_type_declaration -> Ppxlib__.Import.structure_itemval pstr_open : Ppxlib__.Import.open_declaration -> Ppxlib__.Import.structure_itemval pstr_class : Ppxlib__.Import.class_declaration list -> Ppxlib__.Import.structure_itemval pstr_class_type : Ppxlib__.Import.class_type_declaration list -> Ppxlib__.Import.structure_itemval pstr_include : Ppxlib__.Import.include_declaration -> Ppxlib__.Import.structure_itemval pstr_attribute : Ppxlib__.Import.attribute -> Ppxlib__.Import.structure_itemval pstr_extension : Ppxlib__.Import.extension -> Ppxlib__.Import.attributes -> Ppxlib__.Import.structure_itemval toplevel_directive : name:string Ppxlib__.Import.loc -> arg:Ppxlib__.Import.directive_argument option -> Ppxlib__.Import.toplevel_directiveval type_declaration : name:string Ppxlib__.Import.loc -> params:(Ppxlib__.Import.core_type * Ppxlib__.Import.variance) list -> cstrs:(Ppxlib__.Import.core_type * Ppxlib__.Import.core_type * Ppxlib__.Import.location) list -> kind:Ppxlib__.Import.type_kind -> private_:Ppxlib__.Import.private_flag -> manifest:Ppxlib__.Import.core_type option -> Ppxlib__.Import.type_declarationval type_exception : Ppxlib__.Import.extension_constructor -> Ppxlib__.Import.type_exceptionval type_extension : path:Ppxlib__.Import.longident_loc -> params:(Ppxlib__.Import.core_type * Ppxlib__.Import.variance) list -> constructors:Ppxlib__.Import.extension_constructor list -> private_:Ppxlib__.Import.private_flag -> Ppxlib__.Import.type_extensionval value_binding : pat:Ppxlib__.Import.pattern -> expr:Ppxlib__.Import.expression -> Ppxlib__.Import.value_bindingval value_description : name:string Ppxlib__.Import.loc -> type_:Ppxlib__.Import.core_type -> prim:string list -> Ppxlib__.Import.value_description
include Ppxlib__.Ast_builder_intf.Additional_helpers with type 'a with_loc := 'a Ppxlib__.Ast_builder_intf.without_location
val eint : (Ppxlib__.Import.int -> Ppxlib__.Import.expression) with_locval echar : (Ppxlib__.Import.char -> Ppxlib__.Import.expression) with_locval estring : (Ppxlib__.Import.string -> Ppxlib__.Import.expression) with_locval efloat : (Ppxlib__.Import.string -> Ppxlib__.Import.expression) with_locval eint32 : (Ppxlib__.Import.int32 -> Ppxlib__.Import.expression) with_locval eint64 : (Ppxlib__.Import.int64 -> Ppxlib__.Import.expression) with_locval enativeint : (Ppxlib__.Import.nativeint -> Ppxlib__.Import.expression) with_locval ebool : (Ppxlib__.Import.bool -> Ppxlib__.Import.expression) with_locval pint : (Ppxlib__.Import.int -> Ppxlib__.Import.pattern) with_locval pchar : (Ppxlib__.Import.char -> Ppxlib__.Import.pattern) with_locval pstring : (Ppxlib__.Import.string -> Ppxlib__.Import.pattern) with_locval pfloat : (Ppxlib__.Import.string -> Ppxlib__.Import.pattern) with_locval pint32 : (Ppxlib__.Import.int32 -> Ppxlib__.Import.pattern) with_locval pint64 : (Ppxlib__.Import.int64 -> Ppxlib__.Import.pattern) with_locval pnativeint : (Ppxlib__.Import.nativeint -> Ppxlib__.Import.pattern) with_locval pbool : (Ppxlib__.Import.bool -> Ppxlib__.Import.pattern) with_locval eunit : Ppxlib__.Import.expression with_locval punit : Ppxlib__.Import.pattern with_locval evar : (Ppxlib__.Import.string -> Ppxlib__.Import.expression) with_locevar idproduces aPexp_ident _expression, it parses its input so you can pass any dot-separated identifier, for instance:evar ~loc "Foo.bar".
val pvar : (Ppxlib__.Import.string -> Ppxlib__.Import.pattern) with_locval eapply : (Ppxlib__.Import.expression -> Ppxlib__.Import.expression Ppxlib__.Import.list -> Ppxlib__.Import.expression) with_locSame as pexp_apply but without labels
val eabstract : (Ppxlib__.Import.pattern Ppxlib__.Import.list -> Ppxlib__.Import.expression -> Ppxlib__.Import.expression) with_locval esequence : (Ppxlib__.Import.expression Ppxlib__.Import.list -> Ppxlib__.Import.expression) with_locval ppat_tuple_opt : (Ppxlib__.Import.pattern Ppxlib__.Import.list -> Ppxlib__.Import.pattern Ppxlib__.Import.option) with_locval pexp_tuple_opt : (Ppxlib__.Import.expression Ppxlib__.Import.list -> Ppxlib__.Import.expression Ppxlib__.Import.option) with_locval pconstruct : Ppxlib__.Import.constructor_declaration -> Ppxlib__.Import.pattern Ppxlib__.Import.option -> Ppxlib__.Import.patternval econstruct : Ppxlib__.Import.constructor_declaration -> Ppxlib__.Import.expression Ppxlib__.Import.option -> Ppxlib__.Import.expressionval elist : (Ppxlib__.Import.expression Ppxlib__.Import.list -> Ppxlib__.Import.expression) with_locval plist : (Ppxlib__.Import.pattern Ppxlib__.Import.list -> Ppxlib__.Import.pattern) with_locval pstr_value_list : loc:Ppxlib.Location.t -> Ppxlib__.Import.Asttypes.rec_flag -> Ppxlib__.Import.value_binding Ppxlib__.Import.list -> Ppxlib__.Import.structure_item Ppxlib__.Import.listpstr_value_list ~loc rf vbs=pstr_value ~loc rf vbsifvbs <> [],[]otherwise.
val nonrec_type_declaration : (name:Ppxlib__.Import.string Ppxlib.Loc.t -> params:(Ppxlib__.Import.core_type * Ppxlib__.Import.Asttypes.variance) Ppxlib__.Import.list -> cstrs:(Ppxlib__.Import.core_type * Ppxlib__.Import.core_type * Ppxlib.Location.t) Ppxlib__.Import.list -> kind:Ppxlib__.Import.type_kind -> private_:Ppxlib__.Import.Asttypes.private_flag -> manifest:Ppxlib__.Import.core_type Ppxlib__.Import.option -> Ppxlib__.Import.type_declaration) with_locval unapplied_type_constr_conv : (Ppxlib.Longident.t Ppxlib.Loc.t -> f:(Ppxlib__.Import.string -> Ppxlib__.Import.string) -> Ppxlib__.Import.expression) with_locunapplied_type_constr_convis 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 : (Ppxlib.Longident.t Ppxlib.Loc.t -> f:(Ppxlib__.Import.string -> Ppxlib__.Import.string) -> Ppxlib__.Import.expression Ppxlib__.Import.list -> Ppxlib__.Import.expression) with_locval eta_reduce : Ppxlib__.Import.expression -> Ppxlib__.Import.expression Ppxlib__.Import.optionTries to simplify
fun v1 v2 .. -> f v1 v2 ..intof. Only works whenfis 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 iffis 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_nonrecis 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 whenrec_flagisRecursiveto avoid a compile error.- if
val eta_reduce_if_possible : Ppxlib__.Import.expression -> Ppxlib__.Import.expressionval eta_reduce_if_possible_and_nonrec : Ppxlib__.Import.expression -> rec_flag:Ppxlib__.Import.rec_flag -> Ppxlib__.Import.expression