Haskell 任何对象的计数列表

Haskell 任何对象的计数列表,haskell,Haskell,我有这样的数据结构: 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 函数的签名

我有这样的数据结构:

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

函数的签名是错误的。您希望将其作为仲裁类型
a
的列表,并返回一个整数:

countList :: [a] -> Int

函数的签名是错误的。您希望将其作为仲裁类型
a
的列表,并返回一个整数:

countList :: [a] -> Int

那么长度呢?好吧,你是对的,那将是一个选择。另一方面,我想看看如何自己完成这个功能,并删除
(Num)=>
。您编写它的方式看起来是非法的,而且类型类限制是不必要的,因为您从不直接使用元素。只需将签名更改为
countList::[a]->Integer
,因为您有一个任何内容的列表,并且想要返回一个数字。那么只
长度如何呢?好吧,您是对的,这将是一个选项。另一方面,我想看看如何自己完成这个功能,并删除
(Num)=>
。您编写它的方式看起来是非法的,而且类型类限制是不必要的,因为您从不直接使用元素。只需将签名更改为
countList::[a]->Integer
,因为您有一个任何内容的列表,并且希望返回一个数字。