我想组成两个遍历,然后遍历组成也取决于“中间”层的内容。
我认为这意味着从两个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
组合在一起的方法?[@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
的那个。