我一直在试图写一个小文件来尝试一个袋状数据结构。到目前为止,我的代码如下: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