我正在尝试使用折叠来取 Haskell 中整数和的平方。但是,我从 GHCi 收到了一个神秘的错误。这是我的单行:
((^2) . foldl) (+) 0 [1..100]
我从 GHCi 得到的是:
Prelude> ((^2) . foldl) (+) 0 [1..100]
<interactive>:19:3:
No instance for (Num (b0 -> [b0] -> b0))
arising from a use of `^'
Possible fix:
add an instance declaration for (Num (b0 -> [b0] -> b0))
In the first argument of `(.)', namely `(^ 2)'
In the expression: (^ 2) . foldl
In the expression: ((^ 2) . foldl) (+) 0 [1 .. 100]
我认为问题出在我基于此类型声明最后传入的列表中。
Prelude> :t ((^2) . foldl) (+) 0 [1..100]
((^2) . foldl) (+) 0 [1..100]
:: (Enum b, Num b, Num (b -> [b] -> b)) => b
任何人都可以让我了解为什么这种类型需要一种Enum
以及任何方式来显式转换列表以便我可以调试这个函数吗?提前致谢。