フォールドを使用して、Haskell の整数の合計の 2 乗をとろうとしています。しかし、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
この関数をデバッグできるように、この型がリストを明示的にキャストする方法を期待している理由について、誰かが私に洞察を与えることができますか? 前もって感謝します。