import "Prelude" hiding (scanl) scanl :: (b -> a -> b) -> b -> [a] -> [b] scanl f initial l = build (loop initial 0) where len = length l loop cur i accum cons = let nl = cons accum cur in if i==len then nl else loop (f cur (l!i)) (i+1) nl cons main = scanl (+) 0 [1,2,3] -- [0, 1, 3, 6]