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
但是当我尝试运行它时,我得到了错误     无法根据上下文()推论(等式a)        由于在...处使用\'isObject \'而产生。 而当我取出count函数调用时     snd(unwrap(filter(isObject Banana)[(Apple,1),(Banana,2)])) 高兴地返回2。 任何关于这是为什么的线索,或关于编写这种数据结构的建议,将不胜感激。     

解决方法

(==)
只能在包含
Eq
的上下文中使用,但是当您声明
count
时,您没有包括该上下文。如果我阅读正确,那将是
count :: Eq a => Bag a -> a -> Integer
如果在不包括类型的情况下声明
count
,则可以要求
ghci
作为推断的类型;否则,您可以向ask6ѭ请求推断的类型。或索要ѭ7的推断类型     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...