Foldl as foldr
From HaskellWiki
When you wonder whether to choose foldl or foldr you may remember,
that bothfoldl
foldl'
foldr
foldr
foldr
foldl
It holds
foldl :: (a -> b -> a) -> a -> [b] -> a foldl f a bs = foldr (\b g x -> g (f x b)) id bs a
Now the question are:
- How can someone find a convolved expression like this?
- How can we benefit from this rewrite?
The answer to the second question is:
We can write afoldl
and thus may also terminate on infinite input.
The functionfoldlMaybe
Nothing
Nothing
foldlMaybe :: (a -> b -> Maybe a) -> a -> [b] -> Maybe a foldlMaybe f a bs = foldr (\b g x -> f x b >>= g) Just bs a
