如何在Haskell中递归返回一个元组数组

use*_*688 1 recursion haskell

我有以下功能:

function :: [String] -> [[Int]] -> ([[Int]],[[Int]])
Run Code Online (Sandbox Code Playgroud)

我想知道是否有可能做这样的事情:

function :: [String] -> [[Int]] -> ([[Int]],[[Int]])
function a (b:bs) = if condition then ([[]], [b]) ++ function a bs else 
([b], [[]]) ++ function a bs
Run Code Online (Sandbox Code Playgroud)

当然我可以编写两个返回每个[[Int]]的函数,但我想以更合适的方式为Haskell做.

Arj*_*jan 5

元组有一个monoid实例:

(Monoid a, Monoid b) => Monoid (a, b)
Run Code Online (Sandbox Code Playgroud)

所以mappend的结果将是:

([1], [2]) `mappend` ([3], [4])
([1, 3], [2, 4])
Run Code Online (Sandbox Code Playgroud)

所以基本上你只是在你的例子中用mappend替换++