Ich bin kein Spezialist für Typentheorie, aber hier ist mein Verständnis. In der Idris tutorial gibt es einen Abschnitt 12.8 Cumultivity. Er sagt, dass es eine interne Hierarchie des Typs Universen ist:
Type : Type 1 : Type 2 : Type 3 : ...
Und für jede x : Type n
impliziert x : Type m
für jede m > n
. Es gibt auch ein Beispiel, das zeigt, wie es mögliche Zyklen in der Typinferenz verhindert.
Aber ich denke, dass diese Hierarchie nur für den internen Gebrauch ist und es keine Möglichkeit gibt, einen Wert von Type (n+1)
zu erstellen, der nicht in Type n
ist.
Siehe auch Artikel in nLab über universes in type theory und über type of types.
Vielleicht kann diese issue im Idris-Dev-Repository auch nützlich sein. Edwin Brady verweist dort auf die Design and Implementation paper (siehe Abschnitt 3.2.2).
'Typ -> Typ: Typ' –
Ich bin mir nicht sicher, ob Idris dem Programmierer zu viele Informationen über' Type' Levels enthüllt. Der 'Type: Type 1' ist wahrscheinlich nur, weil' Type: Type' ein Widerspruch ist. –
"Typ -> Typ" ist tatsächlich in "Typ 1", aber es ist auch in "Typ" (wie Ramon bemerkte). Dasselbe gilt für 'Nat -> Type' und' List Type'. – Snowball