Wenn alles ein Ausdruck ist, muss auch alles einen Datentyp besitzen. Das beginnt bei einfachen Datentypen, die Werte darstellen, geht über abstrakte Datentypen wie Strukturen und Klassen zu Datentypen, die Sprache und Syntax beschreiben:
| void | kein Wert, kein verwertbarer Datentyp - ist innerhalb von Ausdrücken nicht erlaubt |
| neutral | kein Wert, neutraler Datentyp - entspricht dem neutralem Element für jeden Operator |
| bit, int, real, code | Roh-Daten |
| enum | Aufzählung von Begriffen, aufeinanderfolgend |
| flags | Aufzählung von Begriffen, parallel verwendbar |
| class | abstrakter Datentyp als Kombination von beliebigen Datentypen |
| iterator | Positionsspeicher zum Durchlaufen von Klassen |
| io | Datentyp zum Zugriff auf beliebige Ein-/Ausgabe-Medien |
| dom | Baumstruktur entsprechend eines Data Object Modells |
| type | Datentyp zur Beschreibung eines Datentyps |
| context | Beschreibung einer (Sub-)Sprache |
| operator | Beschreibung von Syntax und Semantik |
| system | Beschreibung von Standard-Betriebsystemfunktionen auf allen Architekturen |
| architectur | Beschreibung, wie ein Zwischencode-Befehl auf die jeweilige Architektur umgesetzt wird |
| object | Ein beliebiger Datensatz mit beliebigen Typ mit dynamischer Auswertung |