Setter镜头作用于haskell的列表范围

时间:2015-12-18 20:48:03

标签: haskell lens

给定一个数组,例如[1..]是否有一种方法可以使镜头加倍[4,100]范围内的所有数字,因此它变为

1,2,3,8,10,12,14,16,...,200,101,102...

我对镜片不是很流利,但我觉得吸气剂是合适的工具。

1 个答案:

答案 0 :(得分:2)

> :m + Control.Lens Data.Ix
> (traverse . filtered (inRange (4, 7)) *~ 2) [1..10]
[1,2,3,8,10,12,14,8,9,10]

请注意,这可能违反了镜头规则,因此在较大的代码上下文中可能会出现意外行为 - 应该注意传递给filtered的属性不会因执行的更新而受到侵犯!< / p>