Я розробляю просту статичну типову функціональну мову програмування як досвід навчання.
Схоже, що типова система, яку я застосувала до цього часу, могла (з невеликою кількістю додаткових робіт) включати типи перетину та з'єднання, наприклад, у вас може бути:
<Union String Integer>
<Union Integer Foo>
- Перетин двох типів вище було б рівним
Integer
- Союз двох типів був би
<Union String Integer Foo>
Те, що це можливо, звичайно, не обов’язково означає, що це гарна дизайнерська ідея. Зокрема, я дещо занепокоєний труднощами в застосуванні для збереження типів, що не перетинаються та / або обробляються перекриттями.
Які плюси та мінуси включення таких функцій у систему типів?