type-level-computation

___ tag123TypelevelComputation ___ Eine Berechnung, die zur Kompilierzeit als Teil der Typprüfphase des Compilers durchgeführt wird. ___ tag123haskell ___ Haskell ist eine funktionale Programmiersprache mit starker statischer Typisierung, verzögerungsfreier Auswertung, umfangreicher Parallelitäts- und Parallelitätsunterstützung und einzigartigen Abstraktionsfunktionen. ___ qstnhdr ___ Warum verletzt dieser Code nicht die "Sättigungsanforderung von Typfamilien"? ___ answer40794384 ___

Ich beantworte meine eigene Frage mit Informationen aus den Kommentaren von dfeuer und user2407038.

Es hat sich herausgestellt, dass mein Code die Sättigungsanforderung verletzt hat . Ich habe den Fehler wegen eines seltsamen Verhaltens (Bug?) Von %code% in ghci nicht gefunden. Aber das Schreiben des Typs in die hs -Datei selbst ergibt einen Kompilierungsfehler.

%code% ist nicht für Typfamilien gedacht, sondern für das Umschließen von regulären Typkonstruktoren wie %code% , die kein Problem mit Typvariablen haben. %code% funktioniert zum Beispiel gut.

Für Typfamilien müssen wir einen speziellen Hilfstyp für jede von ihnen definieren und dann eine %code% -Instanz für den Typ definieren. So:

%Vor%

Beachten Sie, dass die %code% type-Familie auf diese Weise nicht mit einer beliebigen Typvariablen vereinheitlicht wird.

    
___ qstntxt ___

Ich habe dieses minimale Arbeitsbeispiel (aus der Singletons -Bibliothek) für die Zuordnung einer Typfamilie über eine Typ-Ebene ausgewählt Liste:

%Vor%

Es scheint zu funktionieren:

%Vor%

Der Code wird im Beitrag Defunktionalisierung für den Gewinn erläutert. Dies ist ein Workaround für die Tatsache, dass "GHC eine Typvariable nicht mit einer Typfamilie vereinheitlichen lässt". Dies wird als "Sättigungsanforderung von Typfamilien" bezeichnet.

Mein Zweifel ist: Wenn wir " %code% " ausführen, scheint es, dass %code% in der Zeile %code% mit unserer %code% type-Familie übereinstimmt. Warum verstößt das nicht gegen die Sättigungspflicht?

    
___
2
Antworten

Wie löst man in Haskell einen Typ-Familienmuster-Übereinstimmungsfehler aus?

Kann Haskell einen Typ-Familien-Übereinstimmungsfehler anzeigen? Zum Beispiel mit einer geschlossenen Familie: %Vor% Der Typ von Testf Int ist nur Testf Int . Der Compiler erzeugt keinen Fehler. Ist es möglich, es zu generieren, wenn es...
23.05.2016, 16:45
1
Antwort

Was ist das Haskell Syntax (type level operators?)

Was bedeutet '[] oder ': im Haskell-Code? Einige Beispiele - Beispiel 1: > %Vor% Beispiel 2: %Vor%     
03.08.2015, 12:05
1
Antwort

Gibt es eine Verbindung zwischen 'a: ~: b' und '(a: == b): ~: True'?

Gibt es eine Verbindung zwischen propositional und < a href="https://hackage.haskell.org/package/singletons-2.2/docs/Data-Singletons-Prelude-Eq.html"> Gleichstellung gefördert? Sagen wir, ich habe %Vor% im Bereich für einige Symbol s...
20.06.2016, 13:09
2
Antworten

Verhalten von Naturalien auf Typenniveau in GHC 7.8

Wenn Vektoren nach ihrer Länge indiziert werden sollen, können Sie Folgendes tun: %Vor% In ghc 7.8 hatte ich gehofft, dass dies mit den neuen Literalen veraltet würde , aber die direkte Konvertierung ist ungültig: %Vor% Leider gibt dies...
14.05.2014, 21:19
3
Antworten

Erfahrungsberichte mit indizierten Monaden in der Produktion?

In einer früheren Frage habe ich die Existenz von Conor McBrides Kleisli-Pfeilen von Outrageous Fortune während der Suche nach Möglichkeiten der Codierung Idris Beispiele in Haskell . Meine Bemühungen, McBrides Code zu verstehen und ihn in Ha...
06.11.2016, 21:13
1
Antwort

Map Shapeless hlist Typ F [T1] :: ... :: F [Tn] :: HNil zum Typ T1 :: ... :: Tn :: HNil (type level sequencing)

Ich baue eine generische Funktion, die eine HList der Form F[T1] :: ... :: F[Tn] :: HNil übernimmt, diese in eine F[T1 :: ... :: Tn :: HNil] umwandelt und diese dann an einen übergebenen Block übergeben muss Damit ich arbeiten kann, mu...
21.10.2014, 20:39
1
Antwort

Warum verletzt dieser Code nicht die "Sättigungsanforderung von Typfamilien"?

Ich habe dieses minimale Arbeitsbeispiel (aus der Singletons -Bibliothek) für die Zuordnung einer Typfamilie über eine Typ-Ebene ausgewählt Liste: %Vor% Es scheint zu funktionieren: %Vor% Der Code wird im Beitrag Defunktionalisierung...
23.11.2016, 07:49