Автор Copper отказался от union types ради option types — и всё равно сомневается
Union Types and Option Types

Разработчик языка Copper рассказывает, как пробовал union types, но убрал их из-за сложности компилятора, оставив только option types вида T?. Реализация резервирует одно значение типа под nil, что даёт совместимость с C API и нулевые накладные расходы. Оператор as и конструкция or else упрощают проверку на nil, а вот автоматический nil-checker в духе TypeScript и Kotlin пришлось выбросить: он ломается на generic-коде и циклах.
Последнее, но не менее важное: это своего рода чёрная магия — корректность программы зависит от мощности nil-checker.
- ks2048
Где лучше всего искать кросс-языковое описание возможностей языков? Например, «optional types»: в каких языках они есть и как работают? То же самое с «union types» и т.д.
- p1necone
Один простой, но неочевидный (по крайней мере для меня) приём при реализации tagged unions: размещайте дискриминатор/тег union в конце, а не в начале — так указатель на union одновременно является и указателем на значение, и после определения типа не нужно увеличивать указатель, чтобы перескочить через тег.
- gnabgib
(2025) А также о CopperLang (203 балла, 3 дня назад, 120 комментариев) https://news.ycombinator.com/item?id=50308754