Estou projetando uma linguagem de programação funcional de tipo estaticamente simples como uma experiência de aprendizado.
Parece que o sistema de tipos que eu implementei até agora poderia (com um pouco de trabalho extra) incorporar tipos de interseção e união, por exemplo, você poderia ter:
<Union String Integer>
<Union Integer Foo>
- A interseção dos dois tipos acima seria simples
Integer
- A união dos dois tipos seria
<Union String Integer Foo>
O fato de que isso é possível, é claro, não é necessário, significa que é uma boa idéia de design. Em particular, estou um pouco preocupado com as dificuldades de implementação de manter os tipos disjuntos e / ou lidar com sobreposições.
Quais são os prós / contras de incorporar esses recursos no sistema de tipos?