2017-02-03 20 views
0

伯爵表我有一个数据结构,这样的:任何对象

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

对于该结构工作递归我需要计算一个列表对象的功能。对于任何类型的对象是否有普适的一个?

我的编译器只接受民作为一个参数:

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

那么只是'长度'呢? – Carcigenicate

+0

那么,你是对的,这将是一个选项。另一方面,我想看看我可以自己做这个功能 – jublikon

+1

并删除'(Num)=>'。你写它的方式看起来是非法的,并且Typeclass限制是不必要的,因为你从不直接使用这些元素。只需将签名更改为'countList :: [a] - > Integer',因为您有任何列表,并且想要返回一个数字。 – Carcigenicate

回答

2

功能的签名是错误的。你想把它列为一个仲裁类型的列表a并返回一个整数:

countList :: [a] -> Int