我有以下功能:
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做.
元组有一个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替换++