我一直在試圖寫一個小文件來嘗試一個袋狀數據結構。到目前爲止,我的代碼如下:Haskell數據結構奇怪
data Fruit = Apple | Banana | Pear deriving (Eq, Show)
data Bag a = EmptyBag | Contents [(a, Integer)]
emptyBag :: Bag a
emptyBag = EmptyBag
unwrap :: [a] -> a
unwrap [x] = x
isObject theObject (obj, inte) = theObject == obj
count :: Bag a -> a -> Integer
count (Contents [xs]) theObject = snd (unwrap (filter (isObject theObject) [xs]))
count EmptyBag _ = 0
但是當我嘗試運行它,我得到的錯誤 無法推斷(公式一)從在使用「則IsObject」所產生的上下文() 。 ...
,當我把COUNT函數並調用 SND而(解包(過濾器(香蕉則IsObject)(蘋果,1),(香蕉,2))) 它興高采烈地返回2
任何線索爲什麼這是,或建議寫這種數據結構將不勝感激。
不需要'EmptyBag'構造函數;改用'Contents []'。 – augustss 2011-05-25 19:51:19
當你嘗試像'count(Contents [(Banana,2),(Apple,3)])Apple'那樣''[xs]''只與一個元素的列表匹配時'count'也會崩潰! – yatima2975 2011-05-25 20:22:25