我有一个[(a, Maybe b)],并希望获得一个[(a, b)],其中第二个元素被过滤掉的所有对。是否有一种简洁的方法来描述这种使用镜头的操作?
发布于 2013-10-25 14:22:44
不如像这样
[('a',Just 1),('b',Nothing)]^..folded.aside _Just 使用(^..)和folded来自Control.Lens.Fold,aside和_Just来自Control.Lens.Prism。
关键是aside,这是一个方便的函数,它从对对组件上的棱镜构建对的棱镜。
发布于 2013-10-25 15:01:29
尽管镜片精巧,但折叠很可能是简洁的标志:
[ (a, b) | (a, Just b) <- list ](更不用说可读性了)
发布于 2013-10-25 16:01:11
mapMaybe sequenceA :: [(a, Maybe b)] -> [(a,b)]您需要导入Data.Traversable、Data.Maybe并拥有一个Traversable ((,) a)实例。我让读者来弄清楚这是怎么回事。
https://stackoverflow.com/questions/19592088
复制相似问题