mirror of
https://github.com/roc-lang/roc.git
synced 2025-10-03 16:44:33 +00:00
add walk function to list autoderive
This commit is contained in:
parent
21b68a2e27
commit
153b4c6df1
1 changed files with 12 additions and 5 deletions
|
@ -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,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue