Can I use a monadic action to filter Fold from Control.Lens?
haskell, haskell-lens, lenses
Solution
why not
mapM_ actionM <=< filterM predM $ toListOf YOUR_LENS_HERE YOUR_OBJECT_HERE
or just
mapM_ actionM <=< filterM predM $ xs
if you really only need to work on a list
Problem
Control.Lens.Fold contains `filtered`, which I could use to filter a list before applying some monadic action. There doesn't seem to be a corresponding `filteredM` - but is there a way to get that effect? To be clear, say I have ``` xs :: [ MyType ] predM :: MyType -> MyMonad Bool actionM :: MyType -> MyMonad () ``` how can I apply `actionM` to each element of `xs` for which `predM` returns `True`? An important constraint is that I want to sequence all invocations of `predM` before the first invocation of `actionM` - so I need a way to make two passes over the list. I can't just combine `predM` and `actionM` into a single function.