
RWH: chapter 3 - in question 5, you have to write a function which determines if a list is a palindrome. Here is my solution
isPalindrome :: (Eq a) => [a] -> Bool isPalindrome [] = False isPalindrome x = compareLists x (reverse x) where compareLists [x] [y] = x == y compareLists (x:xs) (y:ys) = if x == y then compareLists xs ys else False
Although it works, my question is why ghci refuses to run it without the "(Eq a) => " being added to the type signature of the function. Presumably, it is to let ghc know that you can perform equlity tests on a. If so, then why does the sumList function below work without any type signature of any kind? I haven't told ghc that the input list elements can be added together.
sumList [] = 0 sumList (x:xs) = x + sumList xs
Maybe GHC infers this for you? Inspect the type of sumList by means of
:t sumList
Cheers, Johan