【发布时间】:2016-06-23 09:42:01
【问题描述】:
我对基于指定代数数据结构的队列上的仿函数有疑问。
data DQueue a = Empty | Enqueue a (DQueue a)
deriving (Eq, Show, Read)
instance Functor DQueue
where
fmap f (Enqueue x xs) = Enqueue (f x) $ fmap f xs
instance Foldable DQueue
where
foldr = error "not done"
sample1 :: DQueue Int
sample1 = Enqueue 5 $ Enqueue 7 $ Enqueue 9 Empty
结果应该是这样的:
fmap (+1) sample1 ~?= Enqueue 6 (Enqueue 8 (Enqueue 10 Empty))
foldr (+) 0 sample1 ~?= 24
fmap 似乎在逻辑上是正确的,但我得到一个错误: 函数 fmap 中的非详尽模式
提前谢谢你。
【问题讨论】:
-
因为您缺少
Empty的替代方案。 -
我强烈建议打开警告将
-Wall。很多小错误都被这个抓住了。
标签: haskell functor algebraic-data-types