Ich entwerfe eine einfache statisch typisierte funktionale Programmiersprache als Lernerfahrung.
Es scheint, dass das Typsystem, das ich bisher implementiert habe, (mit ein wenig zusätzlicher Arbeit) Schnitt- und Vereinigungstypen enthalten könnte, z. B .:
<Union String Integer>
<Union Integer Foo>
- Der Schnittpunkt der beiden oben genannten Typen wäre eine Ebene
Integer
- Die Vereinigung der beiden Typen wäre
<Union String Integer Foo>
Die Tatsache, dass dies möglich ist, bedeutet natürlich nicht, dass es sich um eine gute Designidee handelt. Insbesondere bin ich etwas besorgt über die Implementierungsschwierigkeiten, die es mit sich bringt, die Typen disjunkt zu halten und / oder Überschneidungen zu behandeln.
Was sind die Vor- / Nachteile der Aufnahme solcher Merkmale in das Typensystem?