#haskell
#haskell
Вопрос:
Привет всем, я пытаюсь написать этот код, и у меня возникают проблемы с типами данных
data Collection = Set [Int] deriving (Show)
remove :: Int -> Collection -> Collection
remove _ (Set []) = (Set [])
remove numberToRemove (Set (x:xs))
|x == numberToRemove = (Set xs)
|otherwise = Set ([x]:remove numberToRemove xs)
Я получаю эту ошибку, это проблема с типами:
Couldn't match expected type `Int' with actual type `[t0]'
In the first argument of `(:)', namely `[x]'
In the first argument of `Set', namely
`([x] : remove numberToRemove xs)'
In the expression: Set ([x] : remove numberToRemove xs)
Failed, modules loaded: none.
Любая помощь приветствуется
Спасибо
Комментарии:
1. Этот вопрос действительно бесполезно назван…
Ответ №1:
Первая проблема в выражении:
Set ([x] : remove numberToRemove xs)
Заголовок списка (перед : ) должен быть Int , а не [Int], замените на:
Set (x : remove numberToRemove xs)
Затем вторая проблема. В том же выражении подвыражение:
remove numberToRemove xs
является коллекцией, но после оператора должен быть [Int] : итак, возможное решение:
data Collection = Set [Int] deriving (Show)
col_to_list :: Collection -> [Int]
col_to_list (Set xs) = xs
remove :: Int -> Collection -> Collection
remove _ (Set []) = (Set [])
remove numberToRemove (Set (x:xs))
|x == numberToRemove = (Set xs)
|otherwise = Set (x : col_to_list (remove numberToRemove (Set xs)))