Оно деталь A.` Я застрял на ошибку, которая дается, когда я проверить эту функцию:Haskell Ошибка: Нет экземпляра для (Num [[a0]], вытекающее из использования `
maxWeight n wc f =
let ps (x:xs) = case x of
[] -> [[]]
otherwise -> ps xs ++ map (x:) (ps xs)
in maximum $ filter (<wc) $ map sum $ ps $ map f [1..n]
Это полная ошибка:
No instance for (Num [[a0]]) arising from a use of `it`
In a statement of an interactive GHCi command: print it
Я тестирую функцию, вызвав его в GHCi с
maxWeight 5 10 (\i -> i + 1)
О, я вижу, я предположил, что соответствие первого элемента пустым списком совпадает с совпадением всего ввода, являющегося пустым списком – user2452478
Пустой list не имеет первого элемента, но '[[]]' * does * имеет пустой список как первый элемент. Поэтому для компилятора ваш 'ps' работает в списках списков и, следовательно, возвращает списки списков списков. Когда вы их суммируете, вы обрабатываете списки списков, как если бы они были номерами, которые (на обычном английском языке), что говорит ошибка messeage. –