I'm implementing the insert function of a BST, below is my code:
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)
When I was loading this function in ghci, it gave me many errors, which seem to be related to the comparison parts. I don't see any problem with it. I'm new to Haskell, could anybody help? Thanks a lot.
Changing the type of tinsert
to
tinsert :: (Ord a) => Tree a -> a -> Tree a
fixes it.
This is necessary because the functions (<)
and (>)
are from the Ord
typeclass, and you need to own up to that in the type signature.
You also use ==
and (==) :: Eq a => a -> a -> Bool
, but Eq
is a superclass of Ord
, so the compiler knows that if you have (<)
available you already have ==
, so you don't need to say Eq a
as well.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With