flowingSequence :: (a -> [x]) -> ((a, x) -> y) -> (a -> a -> a) -> [a] -> [y] flowingSequence = lyla''aaa'ypax_lxa where lyla''aaa'ypax_lxa lxa ypax aaa la = map ypax $ concatMap (lpax_palx . palx_a) la2 where la2 = scanl1 aaa la palx_a a = (a, lxa a) lpax_palx (a, lx) = map pax_x lx where pax_x x = (a, x)