Мне нужно написать функцию, которая выравнивает список списков.
Например flatten [] = []
или flatten [1,2,3,4] = [1,2,3,4]
или flatten [[1,2],[3],4,5]] = [1,2,3,4,5]
У меня проблемы с возможностьючтобы соответствовать типу в зависимости от того, что дано функции flatten.
Вот что у меня есть:
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
, чтобы функция могла получить один элемент или список элементов.
Кто-нибудь знает другой способ сделать это по-другому, или объяснить, что я могу сделать, чтобы исправитьошибка типа?