在某些情况下,如果不存在正在访问的字段,则^.
镜头 getter 默认为mempty
。示例:
let x = Nothing :: Maybe String
x ^. _Just == ""
具有相似行为的类似镜头 setter 是什么?这是我要找的东西:
data MyRecord = MyRecord { myrecordFoo :: Maybe Int }
instance Monoid MyRecord where
mempty = MyRecord { myRecordFee = Nothing }
$(makeLensesWith abbreviatedFields ''MyRecord)
let x = Nothing :: Maybe MyRecord
x & _Just . foo `someLensSetter` 10 == (Just $ MyRecord { myRecordFoo = 10 })
我尝试过使用<>~
和<>=
,但是无法让它们按照我上面期望的方式工作。这有可能吗?我还有其他标准组合器吗?任何可实现此目的的自定义组合器?