我一直在尝试编写一个小文件来尝试使用类似于袋子的数据结构。到目前为止,我的代码如下:
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
但是当我尝试运行它时,我遇到了错误: 无法从上下文中推导出 (Eq a) 源自于对 'isObject' 的使用 at ....
而当我将计数函数拿出来并调用 snd(unwrap(filter (isObject Banana) [(Apple,1),(Banana,2)])) 它会愉快地返回2。
有关此问题的任何线索或编写此类数据结构的建议都将不胜感激。
count (Contents [(Banana,2),(Apple,3)]) Apple
这样的操作时,由于[xs]
仅匹配具有一个元素的列表,因此count
也会崩溃! - yatima2975