Свести список списки

Мне нужно написать функцию, которая выравнивает список списков.

Например, сглаживание [] = [] или сглаживание [1,2,3,4] = [1,2,3,4] или сглаживание [ [1,2], [3], 4,5]] = [1,2,3,4,5]

У меня проблемы с возможностью сопоставления типа в зависимости от того, что дано функция сглаживания.

Вот что у меня есть:

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])

Насколько я могу судить, проблема в том, что оператор ++ ожидает список для обоих своих аргументов, и я пытаюсь дать ему что-то типа A . Я добавил тип A , чтобы функция могла получить либо отдельный элемент, либо список элементов.

Кто-нибудь знает другой способ сделать это по-другому или объяснить, что я могу сделать, чтобы исправить ошибку типа?

10
задан Lii 8 February 2016 в 19:55
поделиться