gpt4 book ai didi

haskell - 在 Haskell 中使用 Lens 修改值

转载 作者:行者123 更新时间:2023-12-03 15:05:16 28 4
gpt4 key购买 nike

我发现自己经常使用这种模式:

do
let oldHeaders = mail ^. headers
put $ (headers .~ (insert header value oldHeaders)) mail

这似乎是 Control.Lens 应该能够做的事情,但我想我只是还没有找到合适的运算符(operator)。有没有更好的办法?另外,在这段代码中我还应该做些什么不同的事情吗?

最佳答案

您可以使用 Lens 的链es 和 Traversal s 直接访问内部 header 值并更新它。

put $ mail & headers . at header ?~ value

请注意 (?~)只是 \lens value -> lens .~ Just value 的简写. Just需要向 at 表明如果它不存在,我们要插入一个值的镜头。

如果 mail在第一行来自像这样的状态单子(monad)
do
mail <- get
let oldHeaders = mail ^. headers
put $ (headers .~ (insert header value oldHeaders)) mail

那么用 modify :: MonadState s m => (s -> s) -> m () 写起来更简单
modify (headers . at header ?~ value)

正如 Ørjan Johansen 在评论中所建议的那样,可以最简洁地写成
headers . at header ?= value

关于haskell - 在 Haskell 中使用 Lens 修改值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21084178/

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