有可能用setter嵌套`at`吗?

时间:2013-12-04 05:31:37

标签: haskell lens

我想在2级地图中设置一个值 - 即设置为地图中的一个键,该键是“外部”地图中某个键的值。对于普通的地图我可以使用m & at 42 ?= "value"之类的东西 但我找不到任何方法来嵌套2 at 使用镜头设置这种嵌套值的最简单方法是什么?

2 个答案:

答案 0 :(得分:3)

用户陷门出现了一个更好的解决方案 - http://juick.com/qrilka/2602819#19并且它在镜头库中正确:non

答案 1 :(得分:2)

有点,我们可以使用_Just棱镜,如果没有可用的密钥,它将是no-op。这有一个令人遗憾的结果,我们无法创建2层密钥。但作为一个例子

at2 :: Ord k => k -> k -> IndexedTraversal' k (Map k (Map k v)) (Maybe v)
at2 k1 k2 = at k1 . _Just . at k2