Setter 镜头作用于 haskell 中的一系列列表
Setter lens to act on a range of a list in haskell
给定一个数组,例如 [1..]
有没有办法用透镜将 [4,100]
范围内的所有数字加倍,所以它变成
1,2,3,8,10,12,14,16,...,200,101,102...
我不太熟悉镜头,但我觉得 getter 是解决这个问题的正确工具。
> :m + Control.Lens Data.Ix
> (traverse . filtered (inRange (4, 7)) *~ 2) [1..10]
[1,2,3,8,10,12,14,8,9,10]
请注意,这可能违反了镜头法则,因此在较大的代码上下文中可能会出现意外行为——应该注意传递给 filtered
的 属性 没有被违反通过执行的更新!
给定一个数组,例如 [1..]
有没有办法用透镜将 [4,100]
范围内的所有数字加倍,所以它变成
1,2,3,8,10,12,14,16,...,200,101,102...
我不太熟悉镜头,但我觉得 getter 是解决这个问题的正确工具。
> :m + Control.Lens Data.Ix
> (traverse . filtered (inRange (4, 7)) *~ 2) [1..10]
[1,2,3,8,10,12,14,8,9,10]
请注意,这可能违反了镜头法则,因此在较大的代码上下文中可能会出现意外行为——应该注意传递给 filtered
的 属性 没有被违反通过执行的更新!