Module Flambda.Let_expr
The alpha-equivalence classes of expressions that bind variables; and the expressions that bind symbols and code IDs (which are not treated up to alpha equivalence).
Variables have normal syntactic scoping. Symbols and code IDs are treated as in scope in all parts of the term dominated by the corresponding Let-binding.
type t = Flambda2_terms.Flambda.let_exprinclude Flambda2_terms.Expr_std.S_no_free_names
with type t := Flambda2_terms.Flambda.Let_expr.t
val print :
Stdlib.Format.formatter ->
Flambda2_terms.Flambda.Let_expr.t ->
unitval apply_renaming :
Flambda2_terms.Flambda.Let_expr.t ->
Flambda2_nominal.Renaming.t ->
Flambda2_terms.Flambda.Let_expr.tval create :
Flambda2_bound_identifiers.Bound_pattern.t ->
Flambda2_terms.Flambda.named ->
body:Flambda2_terms.Flambda.expr ->
free_names_of_body:
Flambda2_nominal.Name_occurrences.t Flambda2_lattices.Or_unknown.t ->
Flambda2_terms.Flambda.Let_expr.tval defining_expr :
Flambda2_terms.Flambda.Let_expr.t ->
Flambda2_terms.Flambda.namedThe defining expression of the Let.
val pattern_match :
Flambda2_terms.Flambda.Let_expr.t ->
f:
(Flambda2_bound_identifiers.Bound_pattern.t ->
body:Flambda2_terms.Flambda.expr ->
'a) ->
'aLook inside the Let by choosing a member of the alpha-equivalence class.
val pattern_match' :
Flambda2_terms.Flambda.Let_expr.t ->
f:
(Flambda2_bound_identifiers.Bound_pattern.t ->
num_normal_occurrences_of_bound_vars:
Flambda2_nominal.Num_occurrences.t Flambda2_identifiers.Variable.Map.t ->
body:Flambda2_terms.Flambda.expr ->
'a) ->
'amodule Pattern_match_pair_error : sig ... endval pattern_match_pair :
Flambda2_terms.Flambda.Let_expr.t ->
Flambda2_terms.Flambda.Let_expr.t ->
dynamic:
(Flambda2_bound_identifiers.Bound_pattern.t ->
body1:Flambda2_terms.Flambda.expr ->
body2:Flambda2_terms.Flambda.expr ->
'a) ->
static:
(bound_static1:Flambda2_bound_identifiers.Bound_static.t ->
bound_static2:Flambda2_bound_identifiers.Bound_static.t ->
body1:Flambda2_terms.Flambda.expr ->
body2:Flambda2_terms.Flambda.expr ->
'a) ->
('a, Flambda2_terms.Flambda.Let_expr.Pattern_match_pair_error.t)
Stdlib.Result.tLook inside two Lets by choosing members of their alpha-equivalence classes, using the same bound variables for both. If they are both dynamic lets (that is, they both bind variables), this invokes dynamic having freshened both bodies; if they are both static (that is, they both bind symbols), this invokes static with the bodies unchanged, since no renaming is necessary.