Hello,
I'm currently going through the exercises in chapter 3 of Real World Haskell. One of the exercises challenges me to create a function which takes a list and makes a palindrome of it.
I tried to solve it this way:
palindrome :: [t] -> [t]
palindrome xs = xs ++ (reverse xs)
where
reverse [] = []
reverse (x:xs) = (reverse xs) ++ x
But when I try to compile this I get this error:
Kapitel3.hs:14:32-33: error: …
• Couldn't match type ‘t’ with ‘[t]’
‘t’ is a rigid type variable bound by
the type signature for:
palindrome :: forall t. [t] -> [t]
at /Users/jona/programmering/haskell/boken/Kapitel3.hs:13:15
Expected type: [[t]]
Actual type: [t]
• In the first argument of ‘reverse’, namely ‘xs’
In the second argument of ‘(++)’, namely ‘(reverse xs)’
In the expression: xs ++ (reverse xs)
• Relevant bindings include
xs :: [t]
(bound at /Users/jona/programmering/haskell/boken/Kapitel3.hs:14:12)
palindrome :: [t] -> [t]
(bound at /Users/jona/programmering/haskell/boken/Kapitel3.hs:14:1)
Compilation failed.
It looks like I have used a function that want a list of lists, but I don't understand where.
Also, is there some way to declare the type of my reverse-function in this case?
Kind regards,
Jona Ekenberg