Vag*_*rdi 10 haskell haskell-lens
许多镜头吸气剂返回Maybe值.我经常需要用默认值替换它们.
说地图查找,但默认.
fromMaybe "" $ Map.fromList [(1,"Foo")] ^? at 1
Run Code Online (Sandbox Code Playgroud)
这可以用镜头语法编写吗?也许接近这个:
Map.fromList [(1,"Foo")] ^? at 1.or ""
Run Code Online (Sandbox Code Playgroud)
Dan*_*zer 10
我想你想要的是什么
non :: Eq a => a -> Iso a (Maybe a)
Run Code Online (Sandbox Code Playgroud)
non foo 基本上
case someMaybe of
Nothing -> foo
Just a -> a
Run Code Online (Sandbox Code Playgroud)
在你的情况下
someMap ^. at 1 . non ""
Run Code Online (Sandbox Code Playgroud)
巧合的是,这恰恰是示例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
Run Code Online (Sandbox Code Playgroud)