如何在这个Haskell列表函数中执行多个操作?

Ani*_*il 0 haskell functional-programming

我来自Python,我很难学习Haskell.例如,我得到了这个合并列表的功能.所以第一件事是合并列表然后我想返回合并列表的总和.正确的语法怎么样?

merge:: [[a]] -> [a]
merge xss = foldr (++) [] xss
            return sum []
Run Code Online (Sandbox Code Playgroud)

只有删除最后一行,这段代码才有效.但我想返回合并列表的总和.

eps*_*lbe 6

现在你唯一得到的是一个编译时错误,抱怨你的代码中有多个错误 - 我想最好的方法是阅读一些有关haskell语法的内容(例如http://learnyouahaskell.com)

merge :: [[a]] -> [a]
Run Code Online (Sandbox Code Playgroud)

您必须添加类型类约束,因此您可以添加列表的元素 - 现在您说您的函数适用于您可以想到的所有可能元素.

merge:: Num a => [[a]] -> [a]
Run Code Online (Sandbox Code Playgroud)

要在"合并"之后求和,你必须声明一个中间变量,如果你想像你开始那样写它.

merge xss = let tmp = foldr (++) [] xss
            in sum tmp
Run Code Online (Sandbox Code Playgroud)

或者你可以写得更短

merge xs = sum $ concat xs
Run Code Online (Sandbox Code Playgroud)

或者如果你想要甚至更短的点免费

merge = sum . concat
Run Code Online (Sandbox Code Playgroud)