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
我有一个遍历 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