组成两个遍历,具有对中间层的只读访问权限

问题描述 投票:3回答:1

我想组成两个遍历,然后遍历组成也取决于“中间”层的内容。

我认为这意味着从两个IndexedTraversal中创建一个Traversal

rememberMidpoint :: Traversal' s a -> Traversal' a b -> IndexedTraversal' a s b

也许问题可以进一步简化为

remember :: Traversal' s a -> IndexedTraversal' s a a

remember :: Traversal' s a -> IndexedTraversal' a s a

所以我的问题是:

  • 我是否要为此使用IndexedTraversal
  • 如果是,我将如何实现rememberMidpoint或两个remember函数之一,以及将其结果与未索引的Traversal组合在一起的方法?
haskell traversal lens
1个回答
1
投票

[@phadej帮助我解决了#haskell-lens,将我指向selfIndex

使用值本身作为自己的索引。本质上,这是selfIndex的索引版本。

与组合器id一起组成索引和非索引遍历,我们得到:

<.

并在注释中解决<.的问题:

根据文档,您想要的rememberMidpoint :: Traversal' s a -> Traversal' a b -> IndexedTraversal' a s b rememberMidpoint outer inner = outer . selfIndex <. inner 不合法,因为如果您修改最里面的@András Kovács,则IndexedTraversal索引也会更改。

[我不相信这是真的:如果我正确理解a,索引中的b将保留为“原始” selfIndex,而不是其中包含经过修改的a的那个。

© www.soinside.com 2019 - 2024. All rights reserved.