-- Fully strict versions
mapAccumL' :: (acc -> x -> (acc, y)) -> acc -> [x] -> (acc, [y]) 
mapAccumL' _ !s ![]     =  (s, [])
mapAccumL' :: (acc -> x -> (acc, y)) -> acc -> [x] -> (acc, [y])
mapAccumL' _ !s ![]     =  (s, [])
mapAccumL' _ !s ![]     =  (s, [])