December 2, 2025
BDD = Big Debate Day
Lazier Binary Decision Diagrams for set-theoretic types
Lazier types land in Elixir as commenters brawl over a 'double C' and recursive vibes
TLDR: Elixir is pushing a new, math-heavy type system and a lazier diagram approach to avoid performance blowups. Commenters clashed over whether nodes should duplicate and whether the type definition must be fully recursive, turning a technical update into a lively debate about correctness versus practicality.
Elixir and CNRS just rolled out a brainy plan: a “set-theoretic” type system built from unions (this-or-that), intersections (this-and-that), and negations (not-that). Their old trick—DNF, a list of lists—worked until it exploded into eight-copy chaos. Now v1.19 leans on lazier binary decision diagrams (BDD) to rein in the blowups. But the comments erupted: taeric squinted at the diagrams and asked why a mysterious C node shows up twice, arguing classic BDDs should have reduced duplicates and that labels should appear once per path to TOP/BOTTOM. Meanwhile, MarkusQ dove straight into the type signature, proposing a fully recursive lazy_bdd() definition, which split the crowd between “ship it” pragmatists and “prove it” purists.
The memes flew: BDD now stands for “Big Debate Day,” while DNF became “Did Not Finish.” Some joked Elixir finally added a “spicy not” because anonymous function inference needs differences (A minus B) to express real patterns. Others asked if this helps everyday devs or just future maintainers. Fans praised the transparency of documenting the journey on Elixir and cheered the performance focus; skeptics warned that laziness can hide complexity. The vibe: ambitious math meets practical code, with popcorn-worthy nitpicks over diagrams and types.
Key Points
- •Elixir and CNRS are implementing a set-theoretic type system powered by unions, intersections, and negations.
- •DNFs were used in Elixir v1.17 and v1.18 to represent union and intersection types as lists of lists.
- •Union operations on DNFs can introduce duplicates, and intersections result in Cartesian products that may cause exponential blowups.
- •Elixir v1.19 adds type inference for anonymous functions, increasing use of negation and amplifying DNF growth issues.
- •An inference example shows that expressing clause exclusivity requires negation (difference) within the type system.