Module MakeSI.Hoist

type binding = pat * expr
val pp_binding : Ppx_deriving_runtime.Format.formatter -> binding -> Ppx_deriving_runtime.unit
val show_binding : binding -> Ppx_deriving_runtime.string
type t = {
  1. lbs : binding Prelude.list;
  2. effects : SideEffects.t;
}
val pp : Ppx_deriving_runtime.Format.formatter -> t -> Ppx_deriving_runtime.unit
val show : t -> Ppx_deriving_runtime.string
val plus : t -> t -> t
val zero : t
val flbs : t -> binding Prelude.list
val feff : t -> SideEffects.t
val no_lbs : SideEffects.t -> t
class 's monoid : object ... end
class 's bool_monoid : object ... end
module CollectContext : sig ... end
module HoistSeq : sig ... end
val let_of_binding : (pat * expr) -> expr -> expr
val lets_of_bindings : (pat * expr) Prelude.list -> expr -> expr
val collect_and_hoist_effects_object : < visit_F__arbitrary_lhs : CollectContext.t -> F.arbitrary_lhs -> F.arbitrary_lhs * t ; visit_F__as_pattern : CollectContext.t -> F.as_pattern -> F.as_pattern * t ; visit_F__block : CollectContext.t -> F.block -> F.block * t ; visit_F__break : CollectContext.t -> F.break -> F.break * t ; visit_F__construct_base : CollectContext.t -> F.construct_base -> F.construct_base * t ; visit_F__continue : CollectContext.t -> F.continue -> F.continue * t ; visit_F__dyn : CollectContext.t -> F.dyn -> F.dyn * t ; visit_F__early_exit : CollectContext.t -> F.early_exit -> F.early_exit * t ; visit_F__for_index_loop : CollectContext.t -> F.for_index_loop -> F.for_index_loop * t ; visit_F__for_loop : CollectContext.t -> F.for_loop -> F.for_loop * t ; visit_F__lifetime : CollectContext.t -> F.lifetime -> F.lifetime * t ; visit_F__loop : CollectContext.t -> F.loop -> F.loop * t ; visit_F__macro : CollectContext.t -> F.macro -> F.macro * t ; visit_F__match_guard : CollectContext.t -> F.match_guard -> F.match_guard * t ; visit_F__monadic_action : CollectContext.t -> F.monadic_action -> F.monadic_action * t ; visit_F__monadic_binding : CollectContext.t -> F.monadic_binding -> F.monadic_binding * t ; visit_F__mutable_pointer : CollectContext.t -> F.mutable_pointer -> F.mutable_pointer * t ; visit_F__mutable_reference : CollectContext.t -> F.mutable_reference -> F.mutable_reference * t ; visit_F__mutable_variable : CollectContext.t -> F.mutable_variable -> F.mutable_variable * t ; visit_F__nontrivial_lhs : CollectContext.t -> F.nontrivial_lhs -> F.nontrivial_lhs * t ; visit_F__question_mark : CollectContext.t -> F.question_mark -> F.question_mark * t ; visit_F__raw_pointer : CollectContext.t -> F.raw_pointer -> F.raw_pointer * t ; visit_F__reference : CollectContext.t -> F.reference -> F.reference * t ; visit_F__slice : CollectContext.t -> F.slice -> F.slice * t ; visit_F__state_passing_loop : CollectContext.t -> F.state_passing_loop -> F.state_passing_loop * t ; visit_F__trait_item_default : CollectContext.t -> F.trait_item_default -> F.trait_item_default * t ; visit_F__unsafe : CollectContext.t -> F.unsafe -> F.unsafe * t ; visit_F__while_loop : CollectContext.t -> F.while_loop -> F.while_loop * t ; visit_Local_ident__t : CollectContext.t -> Local_ident.t -> Local_ident.t * t ; visit_arm : CollectContext.t -> Hax_engine__Ast.Make(F).arm -> Hax_engine__Ast.Make(F).arm * t ; visit_arm' : CollectContext.t -> Hax_engine__Ast.Make(F).arm' -> Hax_engine__Ast.Make(F).arm' * t ; visit_attr : CollectContext.t -> Ast.attr -> Ast.attr * t ; visit_attrs : CollectContext.t -> Ast.attrs -> Ast.attrs * t ; visit_binding_mode : CollectContext.t -> Hax_engine__Ast.Make(F).binding_mode -> Hax_engine__Ast.Make(F).binding_mode * t ; visit_bool : CollectContext.t -> Base.bool -> Base.bool * t ; visit_borrow_kind : CollectContext.t -> Hax_engine__Ast.Make(F).borrow_kind -> Hax_engine__Ast.Make(F).borrow_kind * t ; visit_char : CollectContext.t -> Base.char -> Base.char * t ; visit_concrete_ident : CollectContext.t -> Ast.concrete_ident -> Ast.concrete_ident * t ; visit_dyn_trait_goal : CollectContext.t -> Hax_engine__Ast.Make(F).dyn_trait_goal -> Hax_engine__Ast.Make(F).dyn_trait_goal * t ; visit_expr : CollectContext.t -> Hax_engine__Ast.Make(F).expr -> Hax_engine__Ast.Make(F).expr * t ; visit_expr' : CollectContext.t -> Hax_engine__Ast.Make(F).expr' -> Hax_engine__Ast.Make(F).expr' * t ; visit_field_pat : CollectContext.t -> Hax_engine__Ast.Make(F).field_pat -> Hax_engine__Ast.Make(F).field_pat * t ; visit_float_kind : CollectContext.t -> Ast.float_kind -> Ast.float_kind * t ; visit_generic_constraint : CollectContext.t -> Hax_engine__Ast.Make(F).generic_constraint -> Hax_engine__Ast.Make(F).generic_constraint * t ; visit_generic_param : CollectContext.t -> Hax_engine__Ast.Make(F).generic_param -> Hax_engine__Ast.Make(F).generic_param * t ; visit_generic_param_kind : CollectContext.t -> Hax_engine__Ast.Make(F).generic_param_kind -> Hax_engine__Ast.Make(F).generic_param_kind * t ; visit_generic_value : CollectContext.t -> Hax_engine__Ast.Make(F).generic_value -> Hax_engine__Ast.Make(F).generic_value * t ; visit_generics : CollectContext.t -> Hax_engine__Ast.Make(F).generics -> Hax_engine__Ast.Make(F).generics * t ; visit_global_ident : CollectContext.t -> Ast.global_ident -> Ast.global_ident * t ; visit_guard : CollectContext.t -> Hax_engine__Ast.Make(F).guard -> Hax_engine__Ast.Make(F).guard * t ; visit_guard' : CollectContext.t -> Hax_engine__Ast.Make(F).guard' -> Hax_engine__Ast.Make(F).guard' * t ; visit_impl_expr : CollectContext.t -> Hax_engine__Ast.Make(F).impl_expr -> Hax_engine__Ast.Make(F).impl_expr * t ; visit_impl_expr_kind : CollectContext.t -> Hax_engine__Ast.Make(F).impl_expr_kind -> Hax_engine__Ast.Make(F).impl_expr_kind * t ; visit_impl_ident : CollectContext.t -> Hax_engine__Ast.Make(F).impl_ident -> Hax_engine__Ast.Make(F).impl_ident * t ; visit_impl_item : CollectContext.t -> Hax_engine__Ast.Make(F).impl_item -> Hax_engine__Ast.Make(F).impl_item * t ; visit_impl_item' : CollectContext.t -> Hax_engine__Ast.Make(F).impl_item' -> Hax_engine__Ast.Make(F).impl_item' * t ; visit_int_kind : CollectContext.t -> Ast.int_kind -> Ast.int_kind * t ; visit_item : CollectContext.t -> Hax_engine__Ast.Make(F).item -> Hax_engine__Ast.Make(F).item * t ; visit_item' : CollectContext.t -> Hax_engine__Ast.Make(F).item' -> Hax_engine__Ast.Make(F).item' * t ; visit_lhs : CollectContext.t -> Hax_engine__Ast.Make(F).lhs -> Hax_engine__Ast.Make(F).lhs * t ; visit_list : 'a. (CollectContext.t -> 'a -> 'a * t) -> CollectContext.t -> 'a Base.list -> 'a Base.list * t ; visit_literal : CollectContext.t -> Ast.literal -> Ast.literal * t ; visit_local_ident : CollectContext.t -> Ast.local_ident -> Ast.local_ident * t ; visit_loop_kind : CollectContext.t -> Hax_engine__Ast.Make(F).loop_kind -> Hax_engine__Ast.Make(F).loop_kind * t ; visit_loop_state : CollectContext.t -> Hax_engine__Ast.Make(F).loop_state -> Hax_engine__Ast.Make(F).loop_state * t ; visit_modul : CollectContext.t -> Hax_engine__Ast.Make(F).item Prelude.list -> Hax_engine__Ast.Make(F).item Prelude.list * t ; visit_mutability : 'mut_witness. (CollectContext.t -> 'mut_witness -> 'mut_witness * t) -> CollectContext.t -> 'mut_witness Ast.mutability -> 'mut_witness Ast.mutability * t ; visit_option : 'a. (CollectContext.t -> 'a -> 'a * t) -> CollectContext.t -> 'a Base.option -> 'a Base.option * t ; visit_param : CollectContext.t -> Hax_engine__Ast.Make(F).param -> Hax_engine__Ast.Make(F).param * t ; visit_pat : CollectContext.t -> Hax_engine__Ast.Make(F).pat -> Hax_engine__Ast.Make(F).pat * t ; visit_pat' : CollectContext.t -> Hax_engine__Ast.Make(F).pat' -> Hax_engine__Ast.Make(F).pat' * t ; visit_prim___tuple_2 : 't0 't1. (CollectContext.t -> 't0 -> 't0 * t) -> (CollectContext.t -> 't1 -> 't1 * t) -> CollectContext.t -> ('t0 * 't1) -> ('t0 * 't1) * t ; visit_prim___tuple_3 : 't0 't1 't2. (CollectContext.t -> 't0 -> 't0 * t) -> (CollectContext.t -> 't1 -> 't1 * t) -> (CollectContext.t -> 't2 -> 't2 * t) -> CollectContext.t -> ('t0 * 't1 * 't2) -> ('t0 * 't1 * 't2) * t ; visit_prim___tuple_4 : 't0 't1 't2 't3. (CollectContext.t -> 't0 -> 't0 * t) -> (CollectContext.t -> 't1 -> 't1 * t) -> (CollectContext.t -> 't2 -> 't2 * t) -> (CollectContext.t -> 't3 -> 't3 * t) -> CollectContext.t -> ('t0 * 't1 * 't2 * 't3) -> ('t0 * 't1 * 't2 * 't3) * t ; visit_projection_predicate : CollectContext.t -> Hax_engine__Ast.Make(F).projection_predicate -> Hax_engine__Ast.Make(F).projection_predicate * t ; visit_quote : CollectContext.t -> Hax_engine__Ast.Make(F).quote -> Hax_engine__Ast.Make(F).quote * t ; visit_safety_kind : CollectContext.t -> Hax_engine__Ast.Make(F).safety_kind -> Hax_engine__Ast.Make(F).safety_kind * t ; visit_span : CollectContext.t -> Ast.span -> Ast.span * t ; visit_string : CollectContext.t -> Base.string -> Base.string * t ; visit_supported_monads : CollectContext.t -> Hax_engine__Ast.Make(F).supported_monads -> Hax_engine__Ast.Make(F).supported_monads * t ; visit_todo : CollectContext.t -> Ast.todo -> Ast.todo * t ; visit_trait_goal : CollectContext.t -> Hax_engine__Ast.Make(F).trait_goal -> Hax_engine__Ast.Make(F).trait_goal * t ; visit_trait_item : CollectContext.t -> Hax_engine__Ast.Make(F).trait_item -> Hax_engine__Ast.Make(F).trait_item * t ; visit_trait_item' : CollectContext.t -> Hax_engine__Ast.Make(F).trait_item' -> Hax_engine__Ast.Make(F).trait_item' * t ; visit_ty : CollectContext.t -> Hax_engine__Ast.Make(F).ty -> Hax_engine__Ast.Make(F).ty * t ; visit_variant : CollectContext.t -> Hax_engine__Ast.Make(F).variant -> Hax_engine__Ast.Make(F).variant * t >
val collect_and_hoist_effects : expr -> expr * SideEffects.t