开发者

Haskell data structures oddity

开发者 https://www.devze.com 2023-03-08 13:20 出处:网络
I\'ve been attempting to write a small file to try out a bag-like data structure. So far my code is as follows:

I've been attempting to write a small file to try out a bag-like data structure. So far my code is as follows:

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

But when I try and run it I get the error Could not deduce (Eq a) from the context () arisi开发者_如何学JAVAng from a use of 'isObject' at ....

Whereas when I take the count function out and call snd(unwrap(filter (isObject Banana) [(Apple,1),(Banana,2)])) it happily returns 2.

Any clues on why this is, or advice on writing this kind of data structure would be much appreciated.


(==) can only be used in a context that includes Eq, but when you declared count you didn't include that context. If I'm reading correctly, that would be

count :: Eq a => Bag a -> a -> Integer

If you declare count without including the type, you can ask ghci for the inferred type; or just ask for the inferred type of snd (unwrap (filter (isObject Banana) [(Apple,1),(Banana,2)]))

0

精彩评论

暂无评论...
验证码 换一张
取 消