Haskell数据结构奇怪

Owe*_*wen 4 haskell types data-structures

我一直试图写一个小文件来尝试类似数据包的数据结构.到目前为止,我的代码如下:

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
Run Code Online (Sandbox Code Playgroud)

但是当我尝试运行它时,我得到的错误无法从上下文()中使用'isObject'来推断(Eq a)....

然而,当我取出计数功能并调用snd(unwrap(filter(isObject Banana)[(Apple,1),(Banana,2)]))时,它很高兴地返回2.

任何关于这个原因的线索,或者关于编写这种数据结构的建议都将非常感激.

gee*_*aur 6

(==)只能在包含的上下文中使用Eq,但是当您声明count不包含该上下文时.如果我正确阅读,那就是

count :: Eq a => Bag a -> a -> Integer
Run Code Online (Sandbox Code Playgroud)

如果您声明count不包括类型,您可以要求ghci推断类型; 或者只是询问推断类型snd (unwrap (filter (isObject Banana) [(Apple,1),(Banana,2)]))