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