所以我正在学习Haskell,我有一个红黑树,红色和黑色节点的类型不同,实现如下:
data Rbtree a1 b1 = EmptyTree | Node a1 (Rbtree b1 a1) (Rbtree b1 a1) deriving (Show, Read, Eq)
Run Code Online (Sandbox Code Playgroud)
现在我需要为它定义一个仿函数实例.因为Rbtree是一个类型构造函数,它需要两个参数来创建一个实例Rbtree c.在此之后我被困住了.我的代码现在是这样的:
instance Functor (Rbtree c) where
fmap f EmptyTree = EmptyTree
fmap f (Node x left right) = Node x (fmap f left) (fmap f right)
Run Code Online (Sandbox Code Playgroud)
正如你猜测的那样,不能编译.(编译错误).我明白,fmap因为它必须是(a -> b) -> (Rbtree c) a -> (Rbtree c) b并且必须更深入地寻找Node它所必需的部分(a -> b) -> (Node c (Rbtree a c) (Rbree …