我必须使二叉树的实现实例化一个类型类:
class Set s where
add :: (Eq a) => a -> s a -> s a
remove :: (Eq a) => a -> s a -> s a
exists :: (Eq a) => a -> s a -> Bool
fold :: (a -> b -> b) -> s a -> b -> b
data BTree k v = Empty | Node k v (BTree k v) (BTree k v) deriving (Show)
Run Code Online (Sandbox Code Playgroud)
一切顺利,直到我必须为二叉树实现折叠.我遇到的问题是我真的不知道如何使用这样的签名保持我的函数的类型声明:(a -> b -> b).我实现了折叠,但我的匿名函数的函数签名有1个累加器和2个值:
foldBST …Run Code Online (Sandbox Code Playgroud)