3

Control.Lens.Fold contains filtered,我可以在应用一些单子操作之前使用它来过滤列表。似乎没有对应的filteredM- 但有没有办法获得这种效果?

要清楚,说我有

xs      :: [ MyType ]
predM   :: MyType -> MyMonad Bool
actionM :: MyType -> MyMonad ()

我如何适用于for which返回actionM的每个元素?xspredMTrue

一个重要的限制是我想predM在第一次调用之前对所有调用进行排序actionM- 所以我需要一种方法来对列表进行两次传递。我不能仅仅将predMand组合actionM成一个函数。

4

1 回答 1

5

为什么不

mapM_ actionM <=< filterM predM $ toListOf YOUR_LENS_HERE YOUR_OBJECT_HERE

要不就

mapM_ actionM <=< filterM predM $ xs

如果你真的只需要处理一份清单

于 2013-07-13T04:11:30.940 回答