给定一个数组,例如[1..]
是否有一种方法可以使镜头加倍[4,100]
范围内的所有数字,因此它变为
1,2,3,8,10,12,14,16,...,200,101,102...
我对镜片不是很流利,但我觉得吸气剂是合适的工具。
答案 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>