From a58d128d9e54a36724d74145a20227c032684b51 Mon Sep 17 00:00:00 2001 From: Ayaz Hafiz Date: Tue, 1 Nov 2022 10:13:51 -0500 Subject: [PATCH] Cover mode when unifying variable slices --- crates/compiler/unify/src/unify.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/crates/compiler/unify/src/unify.rs b/crates/compiler/unify/src/unify.rs index c6b232e4e7..a309fc697a 100644 --- a/crates/compiler/unify/src/unify.rs +++ b/crates/compiler/unify/src/unify.rs @@ -2788,7 +2788,7 @@ fn unify_flat_type( } (Apply(l_symbol, l_args), Apply(r_symbol, r_args)) if l_symbol == r_symbol => { - let mut outcome = unify_zip_slices(env, pool, *l_args, *r_args); + let mut outcome = unify_zip_slices(env, pool, *l_args, *r_args, ctx.mode); if outcome.mismatches.is_empty() { outcome.union(merge(env, ctx, Structure(Apply(*r_symbol, *r_args)))); @@ -2799,7 +2799,7 @@ fn unify_flat_type( (Func(l_args, l_closure, l_ret), Func(r_args, r_closure, r_ret)) if l_args.len() == r_args.len() => { - let arg_outcome = unify_zip_slices(env, pool, *l_args, *r_args); + let arg_outcome = unify_zip_slices(env, pool, *l_args, *r_args, ctx.mode); let ret_outcome = unify_pool(env, pool, *l_ret, *r_ret, ctx.mode); let closure_outcome = unify_pool(env, pool, *l_closure, *r_closure, ctx.mode); @@ -2926,6 +2926,7 @@ fn unify_zip_slices( pool: &mut Pool, left: SubsSlice, right: SubsSlice, + mode: Mode, ) -> Outcome { let mut outcome = Outcome::default(); @@ -2935,7 +2936,7 @@ fn unify_zip_slices( let l_var = env.subs[l_index]; let r_var = env.subs[r_index]; - outcome.union(unify_pool(env, pool, l_var, r_var, Mode::EQ)); + outcome.union(unify_pool(env, pool, l_var, r_var, mode)); } outcome