RosettaCodeData/Task/Greatest-subsequential-sum/Haskell/greatest-subsequential-sum-...

9 lines
256 B
Haskell

maxSubseq :: [Int] -> (Int, [Int])
maxSubseq =
let go x ((h1, h2), sofar) =
((,) <*> max sofar) (max (0, []) (h1 + x, x : h2))
in snd . foldr go ((0, []), (0, []))
main :: IO ()
main = print $ maxSubseq [-1, -2, 3, 5, 6, -2, -1, 4, -4, 2, -1]