Control.Lens.Fold包含filtered
,我可以在应用单子动作之前使用它过滤列表。似乎没有相应的filteredM
-但是有办法获得这种效果吗?
明确地说,我有
xs :: [ MyType ]
predM :: MyType -> MyMonad Bool
actionM :: MyType -> MyMonad ()
如何将
actionM
应用于xs
返回predM
的True
的每个元素?一个重要的约束是我想在
predM
的第一次调用之前对actionM
的所有调用进行排序-因此,我需要一种在列表上进行两次传递的方法。我不能只将predM
和actionM
组合成一个函数。 最佳答案
为什么不
mapM_ actionM <=< filterM predM $ toListOf YOUR_LENS_HERE YOUR_OBJECT_HERE
要不就
mapM_ actionM <=< filterM predM $ xs
如果您真的只需要处理清单