Es gibt ein paar Probleme hier. Zuerst werden Einschränkungen in Klammern und nicht in Klammern geschrieben:
showw :: (Int a) => [a] -> b
Das beseitigt einen Fehler.
Jetzt bin ich mir nicht sicher, was Sie beabsichtigen (Int a)
, aber Int
ist keine Typklasse, so dass Sie es nicht so verwenden können. Vielleicht bedeutete Sie a
ein Int
ist, in diesem Fall werden wir nicht eine Variable vom Typ überhaupt und nur verwenden, um die Int
Art an seiner Stelle verwenden würde:
showw :: [Int] -> b
Jetzt gibt es diese b
Umlauf allem durch seine einsamen und einsam Typvariablen sind generell ein Problem. Es sagt, dass showw
jeder Art überhaupt zurückgeben kann, also, wenn ich sagte, hey, showw
, hier ist [1,2,3,4,5]
, geben Sie mir eine Elephant
es würde einen Elefanten zurückgeben müssen.
Da Sie die Liste auf „Show“ wollen, nehme ich Sie ein String
showw :: [Int] -> String
zurückkehren wollen, die eine angemessene Signatur ist. Jetzt zur Implementierung:
show [] = 0
Um eine leere Liste anzuzeigen, geben Sie ... 0? Das ergibt keinen Sinn. Wahrscheinlich möchten Sie die leere Zeichenfolge ""
.
Und dann diese Zeile:
showw (x:xs) = x ++ showw xs
, in dem Sie versuchen, eine Int
(x
) mit einem String
(showw xs
) zu verketten, was nicht erlaubt ist. Sie müssen zuerst x
in eine Zeichenfolge konvertieren, und ich denke, Sie sollten das mit der regulären show
Funktion tun.
Das gesagt, die show
Funktion kann bereits Listen anzeigen. Aber ich nehme an, du übst.
Wie funktioniert es nicht? –
Es gibt mir diesen Fehler: aplicatie.hs: 1: 12: Fehler: • Erwartet eine Einschränkung, aber '[Int a]' hat Art '*' • In der Typ Unterschrift: afisare :: [Int a ] => [a] -> b aplicatie.hs: 1: 13: error: • Erwartet ein weniger Argument zu 'Int' Erwarteter Typ '* -> *', aber 'Int' hat Art '*' • In der Typ-Signatur: afisare :: [Int a] => [a] -> b –
Sie sollten das zur Frage hinzufügen. – Cirdec