3

Control.Lens.Fold には が含まれていますfiltered。これを使用して、モナド アクションを適用する前にリストをフィルター処理できます。対応するものはないようですがfilteredM、その効果を得る方法はありますか?

明確にするために、私が持っていると言います

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

which returnactionMの各要素にどのように適用できますか?xspredMTrue

predM重要な制約は、 の最初の呼び出しの前に のすべての呼び出しを順序付けたいということですactionM。そのため、リストに対して 2 つのパスを作成する方法が必要です。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 に答える