Are unions in Crystal considered as tagged unions (sum type)?

Totally agree with you here Hank. I learned it the hard way thinking modules interfaces work like in golang (structural typing matching the shape) which sort of works in crystal for methods if you don’t annotate the type but unfortunately does not work for instance variables when you initialize.

Thank you for the link to sealed annotation. Keen to see where it goes in the future but It seems alias is the way to go for now.