List Haskell-使用foldr/foldl对列表进行求和

List Haskell-使用foldr/foldl对列表进行求和,list,haskell,List,Haskell,我正在尝试编写函数来对列表进行求和(键入Integer)。我已经用map完成了: summat :: [[Integer]] -> Integer summat (x:xs) = sum . map sum $ (x:xs) 但是我不知道如何使用foldr/foldl让它工作。我试过这样的方法: summat2 :: [[Integer]] -> Integer summat2 xs = foldr suma 0 xs where suma x _ = ??? 当

我正在尝试编写函数来对列表进行求和(键入
Integer
)。我已经用
map
完成了:

summat :: [[Integer]] -> Integer
summat (x:xs) = sum . map sum $ (x:xs)
但是我不知道如何使用
foldr
/
foldl
让它工作。我试过这样的方法:

summat2 :: [[Integer]] -> Integer
summat2 xs = foldr suma 0 xs
        where suma x _ = ???

当然,这只会产生许多错误。你有什么提示给我吗?如果您想避免任何其他作用于集合的多个元素的函数,请尝试以下方法

foldr ((+) . foldr (+) 0) 0

这只使用(+)、foldr和(.)。

在使用fold进行求和之前,您当然可以使用
concat
,老实说,我就是这样做的
concat
是一个惰性函数,因此您可以用最少的努力从中获得良好的性能?然后你就会知道如何在这里使用
foldr
我认为
foldl'
foldr
更可取。好吧,我用
foldl
写的:
summat3::[[Integer]->Integer
summat3(x:xs)=foldl(+)0(map sum(x:xs))
如何在jamshidh used格式中使用它?只需添加一个翻页即可(翻转$(+).foldl(+)0)0