add walk function to list autoderive

This commit is contained in:
Brendan Hansknecht 2023-11-28 11:50:13 -08:00
parent 21b68a2e27
commit 153b4c6df1
No known key found for this signature in database
GPG key ID: 0EA784685083E75B

View file

@ -110,9 +110,9 @@ pub(crate) fn derive_to_inspector(
} }
fn to_inspector_list(env: &mut Env<'_>, fn_name: Symbol) -> (Expr, Variable) { fn to_inspector_list(env: &mut Env<'_>, fn_name: Symbol) -> (Expr, Variable) {
// Build \lst -> Inspect.list lst (\elem -> Inspect.toInspector elem) // Build \lst -> list, List.walk, (\elem -> Inspect.toInspector elem)
// //
// TODO eta reduce this baby ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // TODO eta reduce this baby ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
use Expr::*; use Expr::*;
@ -212,9 +212,12 @@ fn to_inspector_list(env: &mut Env<'_>, fn_name: Symbol) -> (Expr, Variable) {
// List e, (e -> Inspector fmt) -[uls]-> Inspector fmt where fmt implements InspectorFormatter // List e, (e -> Inspector fmt) -[uls]-> Inspector fmt where fmt implements InspectorFormatter
let inspect_list_fn_var = env.import_builtin_symbol_var(Symbol::INSPECT_LIST); let inspect_list_fn_var = env.import_builtin_symbol_var(Symbol::INSPECT_LIST);
// List elem, to_elem_inspector_fn_var -[clos]-> t1 // List elem, List.walk, to_elem_inspector_fn_var -[clos]-> t1
let this_inspect_list_args_slice = let list_walk_fn_var = env.import_builtin_symbol_var(Symbol::LIST_WALK);
VariableSubsSlice::insert_into_subs(env.subs, [list_var, to_elem_inspector_fn_var]); let this_inspect_list_args_slice = VariableSubsSlice::insert_into_subs(
env.subs,
[list_var, list_walk_fn_var, to_elem_inspector_fn_var],
);
let this_inspect_list_clos_var = env.subs.fresh_unnamed_flex_var(); // clos let this_inspect_list_clos_var = env.subs.fresh_unnamed_flex_var(); // clos
let this_list_inspector_var = env.subs.fresh_unnamed_flex_var(); // t1 let this_list_inspector_var = env.subs.fresh_unnamed_flex_var(); // t1
let this_inspect_list_fn_var = synth_var( let this_inspect_list_fn_var = synth_var(
@ -244,6 +247,10 @@ fn to_inspector_list(env: &mut Env<'_>, fn_name: Symbol) -> (Expr, Variable) {
inspect_list_fn, inspect_list_fn,
vec![ vec![
(list_var, Loc::at_zero(Var(lst_sym, list_var))), (list_var, Loc::at_zero(Var(lst_sym, list_var))),
(
list_walk_fn_var,
Loc::at_zero(Var(Symbol::LIST_WALK, list_walk_fn_var)),
),
(to_elem_inspector_fn_var, Loc::at_zero(to_elem_inspector)), (to_elem_inspector_fn_var, Loc::at_zero(to_elem_inspector)),
], ],
CalledVia::Space, CalledVia::Space,