2017-02-03 49 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