Haskell flatten a list of lists
I have to write a function that flattens a list of lists.

For example flatten [] = [] or flatten [1,2,3,4] = [1,2,3,4] or flatten [[1,2],[3],4,5]] = [1,2,3,4,5]

I'm having trouble with the being able to match the type depending on what is given to the flatten function.

Here's what I have:

    data A a = B a | C [a] deriving (Show, Eq, Ord)

    flatten::(Show a, Eq a, Ord a)=>A a -> A a
    flatten (C []) = (C [])
    flatten (C (x:xs) ) = (C flatten x) ++ (C flatten xs)
    flatten (B a) = (C [a])

From what I can tell the issue is that the ++ operator is expecting a list for both of its arguments and I'm trying to give it something of type A.  I've added the A type so the function can either get a single element or a list of elements.

Does anyone know a different way to do this differently, or explain what I can do to fix the type error? 

Haskell flatten a list of lists
===

I have to write a function that flattens a list of lists.

For example flatten [] = [] or flatten [1,2,3,4] = [1,2,3,4] or flatten [[1,2],[3],4,5]] = [1,2,3,4,5]

I'm having trouble with the being able to match the type depending on what is given to the flatten function.

Here's what I have:

    data A a = B a | C [a] deriving (Show, Eq, Ord)

    flatten::(Show a, Eq a, Ord a)=>A a -> A a
    flatten (C []) = (C [])
    flatten (C (x:xs) ) = (C flatten x) ++ (C flatten xs)
    flatten (B a) = (C [a])

From what I can tell the issue is that the ++ operator is expecting a list for both of its arguments and I'm trying to give it something of type A.  I've added the A type so the function can either get a single element or a list of elements.

Does anyone know a different way to do this differently, or explain what I can do to fix the type error? 
