10

许多镜头吸气剂返回 Maybe 值。而且我经常需要用一些默认值替换它们。

说地图查找,但默认。

fromMaybe "" $ Map.fromList [(1,"Foo")] ^? at 1

这可以用镜头语法编写吗?也许接近这个:

Map.fromList [(1,"Foo")] ^? at 1.or ""
4

1 回答 1

10

我想你想要的是

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
于 2014-02-28T04:11:49.137 回答