Traversal/lens 具有 monad 副作用

Traversal/lens with a monad side effect

我有一个遍历 mytraversal 和一个函数 f: a -> a 可以按如下方式使用:mydata & mytraversal %~ f.

但是,如果我将 f: a -> m a 用于 monad m,我该怎么用?在我的例子中,它是一个状态 monad,我想修改结构的项目,修改当前状态。

type Traversal s t a b = forall f. Applicative f => (a -> f b) -> s -> f t

所以,真的,只是

mydata & mytraversal f

应该做的。如果你想要一个运算符,它叫做 (%%~).

mydata & mytraversal %%~ f