Ich habe ein Problem mit der Definition der Liste. Normalerweise ist die Liste definiert als data [a] = [] | a : [a]
aber wenn ich so etwas auf meinem Code concrete schreibe, dann definiere ich data T a = N | a -> (T a)
, der Interpreter gibt mir einen Fehler:
Fehlgeformter Kopf der Typ- oder Klassendeklaration
Weißt du, was los ist? .
Ihr Problem ist anscheinend, dass Sie ->
als Infix-Konstruktor wie :
verwenden wollten (um eine Liste mit a -> b -> N
syntax zu erstellen). Dies ist nicht zulässig, da benutzerdefinierte Infixkonstruktoren in Haskell mit dem :
-Zeichen beginnen müssen.
Der Grund für Ihre seltsame Fehlermeldung ist, dass ->
in Haskell für Funktionstypen reserviert ist, wie zum Beispiel Jeffs Antwort erklärt
Versuchen Sie es stattdessen:
%Vor% a -> T a
würde bedeuten, dass a eine Funktion ist, die etwas von T a
zurückgibt, also denke ich, dass das ein bisschen falsch ist. Probieren Sie so etwas aus.
N ist die leere Liste (entspricht []
) und R ist der Wertkonstruktor (entspricht :
)
Auf der rechten Seite benötigen Sie eine Möglichkeit, den a
-Wert herum zu tragen. Sie können nun Listen rechts wie.