haskell错误:map应用于太多参数

use*_*607 0 haskell map fold

我一直得到这个错误,我无法解决原因

sumSquares a = map (^2) a . foldr (+) 0
Run Code Online (Sandbox Code Playgroud)

我把数字列表的正方形加起来.

Dan*_*zer 5

.是函数组合,所以你所说的是,使用函数foldr (+) 0 :: [Int] -> Int并用它组成map (^2) a :: [Int],但这没有任何意义,你在这个组合中的第二个"函数"并不是真正的函数.

你想要的是交换它们并使用应用程序,而不是组合

 foldr (+) 0 (map (^2) a)
 foldr (+) 0 $ map (^2) a
Run Code Online (Sandbox Code Playgroud)

这可以转换成具有所谓的"eta转换"的组合

 sumSquares = foldr (+) 0 . map (^2)
 sumSquares = sum . map (^2)
Run Code Online (Sandbox Code Playgroud)

顺便说一句,foldr这里可能是错误的折叠,foldl'会更节省空间.