From 81af929f8f09fe59d9c5a235384dba3cc84622b2 Mon Sep 17 00:00:00 2001 From: Folkert Date: Sun, 18 Oct 2020 21:16:22 +0200 Subject: [PATCH] always unify full alias body, even when alias names match --- compiler/solve/src/solve.rs | 18 ++++++++++-------- compiler/unify/src/unify.rs | 4 ++++ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/compiler/solve/src/solve.rs b/compiler/solve/src/solve.rs index c326ff529b..0bc1d62cfa 100644 --- a/compiler/solve/src/solve.rs +++ b/compiler/solve/src/solve.rs @@ -1121,7 +1121,7 @@ fn adjust_rank_content( rank } - Func(arg_vars, _closure_var, ret_var) => { + Func(arg_vars, closure_var, ret_var) => { let mut rank = adjust_rank(subs, young_mark, visit_mark, group_rank, ret_var); // TODO investigate further. @@ -1129,13 +1129,15 @@ fn adjust_rank_content( // My theory is that because the closure_var contains variables already // contained in the signature only, it does not need to be part of the rank // calculuation - // rank = rank.max(adjust_rank( - // subs, - // young_mark, - // visit_mark, - // group_rank, - // closure_var, - // )); + if false { + rank = rank.max(adjust_rank( + subs, + young_mark, + visit_mark, + group_rank, + closure_var, + )); + } for var in arg_vars { rank = rank.max(adjust_rank(subs, young_mark, visit_mark, group_rank, var)); diff --git a/compiler/unify/src/unify.rs b/compiler/unify/src/unify.rs index 887e394c0d..9cfa5a3d71 100644 --- a/compiler/unify/src/unify.rs +++ b/compiler/unify/src/unify.rs @@ -179,6 +179,10 @@ fn unify_alias( problems.extend(merge(subs, &ctx, other_content.clone())); + if problems.is_empty() { + problems.extend(unify_pool(subs, pool, real_var, *other_real_var)) + } + problems } else { mismatch!()