Standarddefinition der Liste

8

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? .

    
877 08.04.2011, 15:17
quelle

2 Antworten

14

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%     
hugomg 08.04.2011 15:48
quelle
7

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.

%Vor%

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.

%Vor%     
Jeff Foster 08.04.2011 15:25
quelle

Tags und Links