mirror of
https://github.com/roc-lang/roc.git
synced 2025-07-24 15:03:46 +00:00
![]() We must be careful to ensure that if unifying nested lambda sets results in disjoint lambdas, that the parent lambda sets are ultimately treated disjointly as well. Consider ``` v1: {} -[ foo ({} -[ bar Str ]-> {}) ]-> {} ~ v2: {} -[ foo ({} -[ bar U64 ]-> {}) ]-> {} ``` When considering unification of the nested sets ``` [ bar Str ] ~ [ bar U64 ] ``` we should not unify these sets, even disjointly, because that would ultimately lead us to unifying ``` v1 ~ v2 => {} -[ foo ({} -[ bar Str, bar U64 ]-> {}) ] -> {} ``` which is quite wrong - we do not have a lambda `foo` that captures either `bar captures: Str` or `bar captures: U64`, we have two different lambdas `foo` that capture different `bars`. The target unification is ``` v1 ~ v2 => {} -[ foo ({} -[ bar Str ]-> {}), foo ({} -[ bar U64 ]-> {}) ] -> {} ``` Closes #4712 |
||
---|---|---|
.. | ||
helpers | ||
solve_expr.rs |