scanl f z [x1, x2, ...] == [z, z `f` x1, (z `f` x1) `f` x2, ...]
head (scanl f z xs) == z last (scanl f z xs) == foldl f z xs
last (scanl f z xs) == foldl f z xs.
scanl1 f [x1, x2, ...] == [x1, x1 `f` x2, ...]