2017-02-03 2 views
0

У меня есть структура данных, как, что:список Count для любого объекта

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

Для работы с этой структурой рекурсивно мне нужна функция, которая подсчитывает объекты списка. Существует ли универсальный для любого типа объект?

Мой компилятор не принимает только Num в качестве параметра:

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

насчет просто 'length'? – Carcigenicate

+0

Ну, вы правы, что это вариант. С другой стороны, я хотел бы посмотреть, как я могу сделать эту функцию самостоятельно – jublikon

+1

И удалите '(Num) =>'. То, как вы написали это, выглядит незаконным, а ограничение Typeclass не требуется, поскольку вы никогда не используете элементы напрямую. Просто измените подпись на 'countList :: [a] -> Integer', так как у вас есть список чего угодно и хотите вернуть номер. – Carcigenicate

ответ

2

Сигнатура функции является неправильным. Вы хотите взять это список типа arbitraty a и возвращает целое число:

countList :: [a] -> Int 
Смежные вопросы