The Wire · Showcase
ELIXIR TIGHTENS TYPE INFERENCE, SHRINKS UNION BLOAT
By RepoJournal · Filed · About Elixir & Phoenix
The compiler just got smarter about deduplicating type nodes, cutting through the union complexity that's been inflating inferred types for multi-clause functions.
Elixir's type inference engine has been building massive union types when processing functions with multiple clauses. The algorithm works by narrowing: clause one defines the type, clause two subtracts clause one, clause three subtracts both previous clauses. When you union those back together, you get redundant nodes nested inside differences. A commit landed that removes those duplicates [1], collapsing bloated unions into clean, readable types. This matters because it shrinks the output you see in dialyzer reports and makes type-checking faster on large pattern-match functions. In parallel, the team fixed a hardcoded line that shouldn't have been there [2], cleaned up error reporting for bang operator violations [3], and stopped variable refinement from leaking across clause boundaries during inference [4]. Documentation work is underway to expand the types resource page [5].
One email a day. Unsubscribe in one click.
Keep up with Elixir & Phoenix in about 3 minutes a day: what actually shipped — the commits, pull requests, releases, and security advisories that matter.
One email a day. Unsubscribe in one click. Read a past issue →
Action items
- → Watch for next minor release to get the type deduplication improvements elixir-lang/elixir [monitor]
- → Test your dialyzer output after upgrade, union types will look different elixir-lang/elixir [plan]
References
- [1] Remove duplicate nodes in BDD when performing unions elixir-lang/elixir
- [2] Remove hardacoded line elixir-lang/elixir
- [3] Report clearer errors for violations on !, closes #15404 elixir-lang/elixir
- [4] Do not propagate variable refinement during inference elixir-lang/elixir
- [5] Add some initial resources to types page elixir-lang/elixir