Module Melange_compiler_libs.Matching

let call_switcher_variant_constant: Stdlib.ref((Lambda.scoped_location => option(Lambda.lambda) => Lambda.lambda => list((int, (string, Lambda.lambda))) => option(Lambda.switch_names) => Lambda.lambda));
let call_switcher_variant_constr: Stdlib.ref((Lambda.scoped_location => option(Lambda.lambda) => Lambda.lambda => list((int, (string, Lambda.lambda))) => option(Lambda.switch_names) => Lambda.lambda));
let make_test_sequence_variant_constant: Stdlib.ref((option(Lambda.lambda) => Lambda.lambda => list((int, (string, Lambda.lambda))) => Lambda.lambda));
let for_function: scopes:Debuginfo.Scoped_location.scopes => Location.t => option(Stdlib.ref(int)) => Lambda.lambda => list((Typedtree.pattern, Lambda.lambda)) => Typedtree.partial => Lambda.lambda;
let for_trywith: scopes:Debuginfo.Scoped_location.scopes => Location.t => Lambda.lambda => list((Typedtree.pattern, Lambda.lambda)) => Lambda.lambda;
let for_let: scopes:Debuginfo.Scoped_location.scopes => Location.t => Lambda.lambda => Typedtree.pattern => Lambda.lambda => Lambda.lambda;
let for_multiple_match: scopes:Debuginfo.Scoped_location.scopes => Location.t => list(Lambda.lambda) => list((Typedtree.pattern, Lambda.lambda)) => Typedtree.partial => Lambda.lambda;
let for_tupled_function: scopes:Debuginfo.Scoped_location.scopes => Location.t => list(Ident.t) => list((list(Typedtree.pattern), Lambda.lambda)) => Typedtree.partial => Lambda.lambda;
let for_optional_arg_default: scopes:Debuginfo.Scoped_location.scopes => Location.t => Typedtree.pattern => default_arg:Lambda.lambda => param:Ident.t => Lambda.lambda => Lambda.lambda;

for_optional_arg_default pat body ~default_arg ~param is:

let $pat =
  match $param with
  | Some x -> x
  | None -> $default_arg
in
$body
exception Cannot_flatten;
let flatten_pattern: int => Typedtree.pattern => list(Typedtree.pattern);
let expand_stringswitch: Lambda.scoped_location => Lambda.lambda => list((string, Lambda.lambda)) => option(Lambda.lambda) => Lambda.lambda;
let inline_lazy_force: Lambda.lambda => Lambda.scoped_location => Lambda.lambda;
let names_from_construct_pattern: Stdlib.ref((Typedtree.pattern_data(Patterns.Head.desc) => option(Lambda.switch_names)));