path-dependent-type

___ tag123scala ___ Scala ist eine universelle Programmiersprache, die hauptsächlich auf die Java Virtual Machine abzielt. Entwickelt, um gängige Programmiermuster in einer prägnanten, eleganten und typsicheren Weise auszudrücken, vereint es sowohl imperative als auch funktionale Programmierstile. Seine Hauptmerkmale sind: fortgeschrittenes statisches System mit Typinferenz; Funktionstypen; Muster-Matching; implizite Parameter und Konvertierungen; Überlastung des Bedieners; volle Interoperabilität mit Java; Nebenläufigkeit ___ tag123types ___ Typen und Typsysteme werden verwendet, um Abstraktionsstufen in Programmen zu erzwingen. ___ tag123pathdependenttyp ___ hilf uns dieses Wiki zu bearbeiten ___ answer3936029 ___

Das scheint zu funktionieren, aber ich konnte den Cast bei der Berechnung des Repräsentanten nicht loswerden:

%Vor%

Übrigens: Seien Sie vorsichtig mit dem Anwendungsmerkmal, es ist zu Recht veraltet.

    
___ tag123dependentype ___ Abhängige Typen sind Typen, die von Werten abhängen. Sehr wenige Sprachen unterstützen sie - Beispiele sind Agda, ATS, Coq, Epigram, Scala (durch pfadabhängige Typen, eine enge Variante) und Idris, die darauf abzielt, nativen Code auf Systemebene zu produzieren. ___ qstntxt ___

Ich versuche einen generischen Restklassenring in Scala zu definieren. Ein Restklassenring wird durch irgendeinen Basisring (z. B. die ganzen Zahlen) und einen Modul (z. B. zwei) definiert, der ein Wert aus dem Basisring ist. Beide Ringe und ihre Elemente sind Objekte, daher wäre die Art des Moduls normalerweise abhängig vom Typ des Basisrings. Ich verstehe, dass dies in Scala nicht erlaubt ist (aus guten Gründen), also versuche ich es zu emulieren, indem ich den Typ approximiere und eine Laufzeitprüfung mache, wenn der Restklassenring konstruiert wird.

Die Definition von %code% wird ohne Fehler akzeptiert, aber Scala lässt mich nicht instanziieren, für das Argument %code% erhalte ich die Fehlermeldung

%Vor%

Mache ich etwas falsch? Könnte das ein Fehler im Scala Type Checker sein? Gibt es eine bessere Möglichkeit, %code% zu definieren?

Dies ist mit Scala 2.8.0 in der Eclipse IDE für Helios. Das Problem ist bereits für 2.7.x aufgetreten. Hier ist eine vereinfachte Version des Codes:

%Vor%     
___ answer3932684 ___

UPDATE: %code% hinzugefügt, um Änderungen in %code%

zu verdeutlichen

Das Problem scheint zu sein, dass der Inferenztyp nicht automatisch den spezifischsten Typ auswählt, der in Ihrem Fall benötigt wird. Darüber hinaus können Sie kein abhängiges Typargument in derselben Parameterliste wie den Definitionstyp haben.

Sie können die Instanz, von der der Typ abhängt, im äußeren Bereich abrufen (was in der %code% -Klasse geschieht) und den Compiler dazu zwingen, den spezifischsten Typ auszuwählen, wenn Sie die Klasse %code% instanziieren :

%Vor%

Jetzt können Sie es wie folgt verwenden:

%Vor%     
___ qstnhdr ___ So emulieren Sie einen abhängigen Typ in Scala ___
1
Antwort

Was ist der Unterschied zwischen pfadabhängigen Typen und abhängigen Typen?

Scala hat pfadabhängige Typen, aber es wird gesagt, dass Scala keine abhängige Typisierung unterstützt. Was ist der Unterschied zwischen pfadabhängigen Typen und abhängigen Typen? Soweit ich verstehe, sind pfadabhängige Typen eine Art abhängi...
25.07.2014, 16:55
2
Antworten

So emulieren Sie einen abhängigen Typ in Scala

Ich versuche einen generischen Restklassenring in Scala zu definieren. Ein Restklassenring wird durch irgendeinen Basisring (z. B. die ganzen Zahlen) und einen Modul (z. B. zwei) definiert, der ein Wert aus dem Basisring ist. Beide Ringe und ihr...
14.10.2010, 10:20