我想使用lens创建一个函数来更新HashMap键(如果存在);如果键不存在,则该函数的计算结果为 Nothing。这是我迄今为止的尝试..
module Foo where
import Data.HashMap.Strict (HashMap, empty)
import Control.Lens
foo :: HashMap String Integer
foo = empty
-- I want this to be:
-- bar :: Maybe (HashMap String Integer)
bar :: HashMap String Integer
bar = over (at "1") (\_ -> Just 2) foo
这是我最终想要做的事情的简化示例——镜头路径实际上是
Dex.exprs . at exprId . Dex.children
,所以我也希望能够访问“at”之后的路径中更远的字段。但如果“at”聚焦 Nothing,则整个表达式的计算结果应为 Nothing。
我对 Haskell 也很陌生,所以我希望能得到关于更好/简洁/标准地传达概念的指导。我很难为这篇文章写标题。
感谢您的考虑。