Haskell Lens:可能的棱镜

问题描述

我有这些镜头:

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...