diff --git a/compiler/builtins/src/std.rs b/compiler/builtins/src/std.rs index b14d1dd435..273c1ee9a2 100644 --- a/compiler/builtins/src/std.rs +++ b/compiler/builtins/src/std.rs @@ -746,24 +746,24 @@ pub fn types() -> MutMap { Box::new(num_type(flex(TVAR1))), ); - // walk : List elem, (elem -> accum -> accum), accum -> accum + // walk : List elem, state, (state, elem -> state) -> state add_top_level_function_type!( Symbol::LIST_WALK, vec![ list_type(flex(TVAR1)), - closure(vec![flex(TVAR1), flex(TVAR2)], TVAR3, Box::new(flex(TVAR2))), flex(TVAR2), + closure(vec![flex(TVAR2), flex(TVAR1)], TVAR3, Box::new(flex(TVAR2))), ], Box::new(flex(TVAR2)), ); - // walkBackwards : List elem, (elem -> accum -> accum), accum -> accum + // walkBackwards : List elem, state, (state, elem -> state) -> state add_top_level_function_type!( Symbol::LIST_WALK_BACKWARDS, vec![ list_type(flex(TVAR1)), - closure(vec![flex(TVAR1), flex(TVAR2)], TVAR3, Box::new(flex(TVAR2))), flex(TVAR2), + closure(vec![flex(TVAR2), flex(TVAR1)], TVAR3, Box::new(flex(TVAR2))), ], Box::new(flex(TVAR2)), ); @@ -779,17 +779,17 @@ pub fn types() -> MutMap { ) } - // walkUntil : List elem, (elem -> accum -> [ Continue accum, Stop accum ]), accum -> accum + // walkUntil : List elem, state, (state, elem -> [ Continue state, Stop state ]) -> state add_top_level_function_type!( Symbol::LIST_WALK_UNTIL, vec![ list_type(flex(TVAR1)), + flex(TVAR2), closure( vec![flex(TVAR1), flex(TVAR2)], TVAR3, Box::new(until_type(flex(TVAR2))), ), - flex(TVAR2), ], Box::new(flex(TVAR2)), ); diff --git a/compiler/can/src/builtins.rs b/compiler/can/src/builtins.rs index 9c2f014586..fb3415691f 100644 --- a/compiler/can/src/builtins.rs +++ b/compiler/can/src/builtins.rs @@ -2050,8 +2050,8 @@ fn list_sum(symbol: Symbol, var_store: &mut VarStore) -> Def { op: LowLevel::ListWalk, args: vec![ (list_var, Var(Symbol::ARG_1)), - (closure_var, list_sum_add(num_var, var_store)), (num_var, num(var_store.fresh(), 0)), + (closure_var, list_sum_add(num_var, var_store)), ], ret_var, }; @@ -2092,8 +2092,8 @@ fn list_product(symbol: Symbol, var_store: &mut VarStore) -> Def { op: LowLevel::ListWalk, args: vec![ (list_var, Var(Symbol::ARG_1)), - (closure_var, list_product_mul(num_var, var_store)), (num_var, num(var_store.fresh(), 1)), + (closure_var, list_product_mul(num_var, var_store)), ], ret_var, };