Kann String nicht zu einer Instanz einer Klasse in Haskell machen

8

Ich spiele herum und versuche den Unterricht in Haskell zu verstehen. Ich habe ein paar dumme Zeilen Code geschrieben, um den Dreh raus zu kriegen. Ich habe eine Klasse namens Slang geschrieben, die eine Funktion hat. Wenn ich Integer eine Instanz meiner Klasse mache, funktioniert es gut. Aber wenn ich String zu einer Instanz meiner Klasse mache, wird es nicht kompiliert. Ich habe mit dem Programm herumgefummelt, basierend auf dem, was die Fehlerausgabe mir sagt, aber ohne Erfolg. Ich habe eine Idee, warum es funktioniert ...

Hier ist der Code gefolgt von dem Fehler:

%Vor%

FEHLER:

%Vor%     
CodyBugstein 08.03.2013, 02:44
quelle

2 Antworten

12

Das Problem ist, dass String kein Basistyp wie Integer ist. Was Sie versuchen, ist tatsächlich

%Vor%

Haskell98 verbietet jedoch diese Art von Typklasse, um die Dinge einfach zu halten und es Leuten zu erschweren, überlappende Instanzen wie

zu schreiben %Vor%

Wie Sie der Fehlermeldung entnehmen können, können Sie diese Einschränkung umgehen, indem Sie FlexibleInstances Erweiterung.

    
hugomg 08.03.2013, 02:54
quelle
5

Ich habe in meiner Haskell-Literatur recherchiert (auch meine aktuelle Bibel) und ein Beispiel gefunden, das mein Problem effektiv löst.

Im Grunde haben Sie in dieser Problemumgehung Char als eine Instanz der Klasse festgelegt (im Beispiel des Buches heißt sie Visible ) und dann können Sie [chars] aka a String als Instanz der Klasse festlegen NUR MIT der Vorgabe, dass die Typvariable chars eine Instanz von 'Visible' sein soll. Es ist einfacher zu verstehen, wenn Sie sich den folgenden Code ansehen:

%Vor%

Mein GHCi Lade- und Funktionsaufruf:

%Vor%

Eureka!

    
CodyBugstein 08.03.2013 03:48
quelle

Tags und Links