小编Pas*_*uda的帖子

是否有可用于深入挖掘多维地图的镜头/光学元件?

我在使用 Lenses 和 Maps 时遇到了一些困难。我有看起来像这样的地图Map String (Map String Int)。这些是多维数组,我通常使用已知维度设置它们。我经常想读取和更新这些 Maps 的元素,但不想添加或删除元素。

我想要一个类似于ix "k1" . ix "k2"允许我执行以下操作的光学器件:

myfunc :: Map String (Map String Int) -> ()
myfunc m =
  let m' = m & ix "k1" . ix "k2" %~ (+1)
      v = m ^. ix "k1" . ix "k2"
  in () 

Run Code Online (Sandbox Code Playgroud)

不幸的是,我不能使用ix "k1" . ix "k2"v = m ^. ix "k1" . ix "k2"因为Int它不是 Monoid无法编译。一般来说,我不能有这个 Monoid 限制,因为我通常在我的地图中持有相当复杂的值(比如一些复杂的状态 ADT)。(我猜这个 Monoid 限制是存在的,所以 …

haskell lenses

8
推荐指数
0
解决办法
83
查看次数

Haskell 身份镜头

我想知道 Haskell 中是否有身份镜头。一个镜头identity,如果我有一个类型data MyType = MyType { _myField :: Int },那么我可以做到myType ^. identity . myField .~ 2 。似乎有一个lens-1.1.1,但我在 中找不到lens-4.19.2

haskell haskell-lens

6
推荐指数
1
解决办法
146
查看次数

标签 统计

haskell ×2

haskell-lens ×1

lenses ×1