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]が、状態のコンテキストでこれを行う方法がわかりません。

4

2 に答える 2

3

(%=) コンビネータを使用すると、レンズのターゲットに関数を適用できます。あなたは次のようなものが欲しい

stateSnoc :: MonadState Foo m => Int -> m ()
stateSnoc x = vec %= (|> x)
于 2014-01-23T22:39:37.943 に答える
1

snocは、元の から便宜上定義された単純な関数のようPrismです_Snoc

では、次のような単純なMonadState関数を使用してみませんmodifyか?

runState (modify $ flip snoc 'a') ['b']
-- ((),"ba")
于 2014-01-23T22:46:45.490 に答える