gpt4 book ai didi

haskell - 如何使用 Lenses 对处于某种状态的序列执行只读的 monadic 操作?

转载 作者:行者123 更新时间:2023-12-05 00:26:35 25 4
gpt4 key购买 nike

我的数据结构看起来或多或少是这样的(为了问题的目的而简化)

data GameObject = GameObject { _num :: Int }
data Game = Game { _objects :: [GameObject] }

我用 makeLenses为这两个生成访问器。因此,我能够像这样集体进行操作:
-- loop :: MonadState with Game inside
loop = objects.traversed.num += 1

这很棒。

但是,我找不到一种方法来执行此操作(每打印一次 num ):
game <- get
let objects = _objects game
let objectNums = map _num objects
mapM_ print objectNums

我试过这样的事情
uses (objects.traversed.num) >>= mapM_ print

但我看到的唯一方法是使用 traversed像这样的状态涉及使用幺半群,我不想组合这些领域;我想对驻留在我的状态中的某个序列的元素中的每个元素的一部分运行一元操作。

那么,这是否可以使用一些提供的 Lens 功能,还是我必须自己编写,不知何故?

最佳答案

关于什么

mapMOf_ (objects . traversed . num) print

或者如果你想把它应用到 state monad 的状态,
get >>= mapMOf_ (objects . traversed . num) print

? (也许有一种更像镜头的方式将第一行与 state monad 的状态结合起来。如果是这样,我想自己了解一下。)

关于haskell - 如何使用 Lenses 对处于某种状态的序列执行只读的 monadic 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21996966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com