用镜头过滤复合结构

时间:2013-10-25 14:07:24

标签: haskell lenses

我有一个[(a, Maybe b)],想要获得[(a, b)],其中第二个元素Nothing被过滤掉的所有对。 是否有一种简洁的方法来描述使用镜头的操作?

3 个答案:

答案 0 :(得分:10)

这样的东西
[('a',Just 1),('b',Nothing)]^..folded.aside _Just 

使用(^..)中的foldedControl.Lens.Fold以及aside中的_JustControl.Lens.Prism

关键是aside,这是一个方便的功能,它可以在一对棱镜上构建一个棱镜,从棱镜上工作一对组件。

答案 1 :(得分:9)

尽管镜片具有独创性,但以下内容可能是简洁的标志:

[ (a, b) | (a, Just b) <- list ]

(更不用说可读性了。)

答案 2 :(得分:3)

mapMaybe sequenceA :: [(a, Maybe b)] -> [(a,b)]

您需要导入Data.TraversableData.Maybe并拥有Traversable ((,) a)个实例。我想知道这对读者有何影响。