I am playing with concatenating lists so I start with this:
testconcat :: [[a]] -> [a]
testconcat [[]] = []
testconcat [(x:xs)] = x : xs
Now, testconcat [[]] and testconcat [[1,2]] works
So now I want to try with a 2nd inner list so I do this:
testconcat :: [[a]] -> [a]
testconcat [[]] = []
testconcat [(x:xs)] = x : xs
testconcat [(x:xs), (y:ys)] = x : xs : y : ys
and I get load error:
Couldn't match expected type `a' with actual type `[a]'
`a' is a rigid type variable bound by
the type signature for testconcat :: [[a]] -> [a]
at prog_haskell.hs:218:15
In the first argument of `(:)', namely `xs'
In the second argument of `(:)', namely `xs : y : ys'
In the expression: x : xs : y : ys
But this loads ok:
testconcat :: [[a]] -> [a]
testconcat [[]] = []
testconcat [(x:xs)] = x : xs
testconcat [(x:xs), (y:ys)] = x : xs
Even this line cannot be loaded:
testconcat [(x:xs), (y:ys)] = x : xs : []
Couldn't match expected type `a' with actual type `[a]'
`a' is a rigid type variable bound by
the type signature for testconcat :: [[a]] -> [a]
at prog_haskell.hs:218:15
In the first argument of `(:)', namely `xs'
In the second argument of `(:)', namely `xs : []'
In the expression: x : xs : []
Failed, modules loaded: none.
if x : xs works why not x : xs : <something else> ???
Can someone please explain?