问题描述
我有这些镜头:
getB :: Lens' A (Maybe B)
getC :: Prism' B C
如何从 A 中提取 Maybe C
?
我能找到的最好的:
case A ^. getB of
Just b -> b ^? getC
nothing -> nothing
还有更优雅的吗?
解决方法
_Just :: Prism' (Maybe a) a
_Just
棱镜会让您从 Maybe
中获得价值。
a ^? getB . _Just . getC
,
或者您可以使用 Maybe
的 Traversable
实例,如果存在 Just
中的值,它会获取该值。
-- traverse :: Traversal' (Maybe a) a
a ^? getB . traverse . getC