Überlappende Instanzen in Haskell

8

Lesen Sie das Buch Real world Haskell geting unter dem Beispiel überlappender Instanzen

%Vor%

Nach meinem Verständnis wird dies keine Überschneidung sein, da [a] keine Wahl sein sollte, da die Einschränkung für JSON [a] war, dass "a" eine Instanz von JSON sein muss. Es gibt keine Instanz von JSON für (String, a).

    
Jammy Lee 27.05.2013, 15:18
quelle

2 Antworten

17
  

Nach meinem Verständnis wird dies keine Überschneidung sein, da [a] keine Wahl sein sollte, da die Einschränkung für JSON [a] war, dass a eine Instanz von JSON sein muss. Es gibt keine Instanz von JSON für (String, a) .

Das ist ein Missverständnis. GHC führt bei der Instanzauswahl nur den Instanzkopf und keine Einschränkungen für die Instanzen durch.

%Vor%

bedeutet für die Instanzauswahl dasselbe wie

%Vor%

auch der Kontext von

%Vor%

wird für die Auswahl der Instanz ignoriert.

Somit sieht GHC die beiden Instanzen

%Vor%

und beide entsprechen den erforderlichen

%Vor%

bedeutet, dass Sie sich überlappen (unabhängig davon, welche Instanzen tatsächlich existieren und welche Einschränkungen jede der beiden Instanzen hat).

Wenn eine Instanz ausgewählt ist, werden die Einschränkungen berücksichtigt, und wenn sie nicht erfüllt werden, ist das ein Typfehler.

    
Daniel Fischer 27.05.2013, 15:50
quelle
5

Diese existieren

%Vor%

Es würde also Überschneidungen geben, selbst wenn GHC den Kontext berücksichtigt (siehe Daniel Fischers Antwort).

    
J. Abrahamson 27.05.2013 15:22
quelle

Tags und Links