我目前的代码如下所示:
do
x <- use foo
foo <~ runFoo x
foo
一个字段在哪里,Lens
并且Foo
runFoo :: MonadState m => Foo -> m Foo
我认为应该有一种方法可以在一行中执行此操作,但我找不到。我认为它应该有这样的评论:
(????) :: MonadState s m => Lens' s a -> (a -> m a) -> m a
问题:
- 这样的组合器存在吗?如果是这样,那是什么?
- 当我遇到这样的另一个问题时,搜索它的最佳方法是什么(即通常我会在 Hoogle 中输入它,但我没有运气好用镜头库做到这一点)
- 这实际上是 Control.Monad 中的原始组合器吗?(如果这是 kleisli 箭的另一份工作,我会有点尴尬)