许多镜头吸气剂返回 Maybe 值。而且我经常需要用一些默认值替换它们。
说地图查找,但默认。
fromMaybe "" $ Map.fromList [(1,"Foo")] ^? at 1
这可以用镜头语法编写吗?也许接近这个:
Map.fromList [(1,"Foo")] ^? at 1.or ""
许多镜头吸气剂返回 Maybe 值。而且我经常需要用一些默认值替换它们。
说地图查找,但默认。
fromMaybe "" $ Map.fromList [(1,"Foo")] ^? at 1
这可以用镜头语法编写吗?也许接近这个:
Map.fromList [(1,"Foo")] ^? at 1.or ""
我想你想要的是
non :: Eq a => a -> Iso a (Maybe a)
non foo
基本上是
case someMaybe of
Nothing -> foo
Just a -> a
在你的情况下
someMap ^. at 1 . non ""
巧合的是,这正是文档给出non
的示例。
如果你想用这个ix
你运气不好,但你总是可以这样做
-- Import Data.Monoid
defaulting :: a -> s -> Getting (First a) s a -> a
defaulting a s fold = fromMaybe a $ s ^? fold
foo = defaulting 0 [1, 2, 3] $ ix 3 -- 0