haskell-jp / beginners #22 at 2022-11-30 21:55:50 +0900

こんばんは。 State モナドの質問です。 mapAccumLmapMState モナドで作り直してみました。
このとき mapM使用した無名関数 が長くて気になりました。もしも`\acc x -> .. (acc', x')` のような純粋な関数を State モナドに?変換できたら、 mapM (変換 $ \acc x -> .. (acc', x')) .. のように書けて便利だと思います。この 変換 のような関数はありますか? よろしくお願いします。
Viktor Kronvall
stateって関数見ましたか?多分簡単に使えるかと思います。

ただ、`Vector`で使うのなら`State`がLazy度ありすぎてパフォーマンスに良くないかも知れませんよ。
2 冊入門書を読んでも State モナドが理解できなかったのですが、今繋がってきました
なんとか動きました!
-- (6, [1,2,3])
print $ runState (mapM (\x -> state $ \acc -> (x, x + acc)) [1, 2, 3]) (0 :: Int)
StatemapMState 同士を繋いでくれる……? 入門書に帰ってみます! (`mapM = sequence . fmap` ?)
初めてまともに State モナドが使えました。ありがとうございます! パフォーマンスが問題になったらまた質問させてください。