2017-02-03 22 views
0

Ich habe eine Datenstruktur wie folgt aus:Zählliste für jedes Objekt

data MultTree b = DataNode b | IndexNode Int Int [MultTree b] deriving (Show) 

Denn mit dieser Struktur arbeitet rekursiv brauche ich eine Funktion, die die Objekte einer Liste zählt. Gibt es für jede Art von Objekt eine universelle?

Mein Compiler nur Num als Parameter akzeptiert:

countList :: (Num) => [a] -> a 
countList [] = 0 
countList (x:xs) = 1 + countList xs 
+1

Was ist mit nur 'Länge'? – Carcigenicate

+0

Nun, Sie haben Recht, das wäre eine Option. Auf der anderen Seite würde ich gerne sehen, wie ich diese Funktion selbst durchführen könnte – jublikon

+1

Und entfernen Sie die '(Num) =>'. Die Art, wie Sie sie geschrieben haben, scheint illegal zu sein, und eine Einschränkung der Typenklasse ist unnötig, da Sie die Elemente niemals direkt verwenden. Ändern Sie einfach die Signatur in "countList :: [a] -> Integer", da Sie eine Liste von allem haben und eine Zahl zurückgeben möchten. – Carcigenicate

Antwort

2

Die Signatur der Funktion falsch ist. Sie wollen es eine Liste einer Arbitraty Typ a nehmen und eine ganze Zahl zurückgeben:

Verwandte Themen