Warum bekomme ich einen Fehler Konnte nicht ableiten (Ord a)?

8

Ich versuche die Liste mit der kleinsten Summe von Elementen zu finden.:

%Vor%

Das gibt mir den folgenden Fehler:

%Vor%

Warum wird der Funktionstyp nicht überprüft?

    
foFox 21.10.2012, 23:15
quelle

2 Antworten

15

An diesem Code sind zwei Klassen beteiligt: Num und Ord . Hinweis dass ein Typ ein Mitglied Num und nicht Ord sein kann und umgekehrt.

Der Typ von sum ist Num a => [a] -> a , also müssen die Eingabeelemente für shortest ein Mitglied von Num sein. Sie tun auch folgendes in deinem Code:

%Vor%

Dies bedeutet, dass Sie den Operator < auf a s verwenden, aber in Ihrer Typignatur haben Sie nicht verlangt, dass a s eine Instanz von Ord ist, die < definiert:

%Vor%

Daher müssen Sie diese Anforderung zu Ihrer Typsignatur hinzufügen:

%Vor%

Oder Sie könnten die Typ-Signatur weglassen.

    
HaskellElephant 21.10.2012, 23:30
quelle
5

Num enthält nicht Ord , daher fehlt die Ord Einschränkung für a in der Typsignatur. Es sollte

sein %Vor%

Sie können die Typensignatur entfernen und GHC wird dies für Sie ableiten.

    
jtobin 21.10.2012 23:22
quelle

Tags und Links