在尝试使用 Edwards图书馆时,我再次感到困惑。lens
我尝试snoc
在状态上下文中将一些东西放在向量的末尾:
data Foo = Foo {
_vec :: Vector Int
}
makeLenses ''Foo
testCons x = vec <>= singleton x
虽然这可行,但我想使用[cons][2]
,但我不知道如何使用。文档提到[0,1,2] |> 3 === [0,1,2,3]
但我不知道如何在状态上下文中执行此操作。
在尝试使用 Edwards图书馆时,我再次感到困惑。lens
我尝试snoc
在状态上下文中将一些东西放在向量的末尾:
data Foo = Foo {
_vec :: Vector Int
}
makeLenses ''Foo
testCons x = vec <>= singleton x
虽然这可行,但我想使用[cons][2]
,但我不知道如何使用。文档提到[0,1,2] |> 3 === [0,1,2,3]
但我不知道如何在状态上下文中执行此操作。
(%=) 组合器可让您将函数应用于镜头的目标;你想要类似的东西
stateSnoc :: MonadState Foo m => Int -> m ()
stateSnoc x = vec %= (|> x)
snoc
似乎是为方便起见从原始定义的普通函数Prism
,即_Snoc
.
那么为什么不使用一个普通的MonadState
函数呢,比如modify
?
runState (modify $ flip snoc 'a') ['b']
-- ((),"ba")