Haskell错误:使用`it`时没有(Num [[a0]]的实例

时间:2015-10-17 15:20:58

标签: haskell

我遇到了测试此功能时出现的错误:

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)

1 个答案:

答案 0 :(得分:1)

我发现很难理解你的功能(以及助手ps)应该做什么(这通常有助于获得更好的答案...... :-)但看起来你在混淆两个成语您对ps

的定义

你可以写

ps y = case y of
  [] -> [[]]
  (x:xs) -> ps xs ++ map (x:) (ps xs)

或只是

ps [] = [[]]
ps (x:xs) = ps xs ++ map (x:) (ps xs)

但是现在看来,ps的定义缺少一个基本情况(什么是ps []?)

有了这个,定义就会编译,而maxWeight 5 10 (\i -> i + 1)会产生9