mirror of
https://github.com/roc-lang/roc.git
synced 2024-09-22 00:09:33 +03:00
cd2b936a59
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 |
||
---|---|---|
.. | ||
src | ||
Cargo.toml |