我实现了BST的插入功能,下面是我的代码:
data Tree a = Empty | Branch a (Tree a) (Tree a)
deriving (Show, Eq)
tinsert :: Tree a -> a -> Tree a
tinsert Empty a = Branch a Empty Empty
tinsert (Branch a left right) b
| b == a = Branch a left right
| b < a = Branch a (tinsert left b) right
| b > a = Branch a left (tinsert right b)
当我在ghci中加载此函数时,它给了我很多错误,这些错误似乎与比较部分有关。我没有看到任何问题。我是Haskell的新手,有人可以帮忙吗?非常感谢。
答案 0 :(得分:8)
将tinsert
的类型更改为
tinsert :: (Ord a) => Tree a -> a -> Tree a
修复它。
这是必要的,因为函数(<)
和(>)
来自Ord
类型类,您需要拥有类型签名中的函数。
您还使用==
和(==) :: Eq a => a -> a -> Bool
,但Eq
是Ord
的超类,因此编译器知道如果您已经(<)
可用有==
,因此您也不需要说Eq a
。