Haskell 镜头:多棱镜

Haskell Lens: Prism over maybes

我有那些镜头:

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

或者您可以使用 MaybeTraversable 实例,它获取 Just 中的值(如果有的话)。

-- traverse :: Traversal' (Maybe a) a
a ^? getB . traverse . getC