10
許多鏡頭獲得者返回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 ""
巧合的是,THI s正好是non
的docs給出的例子。
如果你想與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
真棒感謝!按我的意願工作。我不知道他們爲什麼把它命名爲非?奇怪的名字。 「或」會更清晰。 –
@VagifVerdi它應該是'a'的一個映射,沒有任何值提供給'也許a',所以在這個意義上它更有意義 – jozefg
嗯,結果在某些情況下不起作用。與^一起工作。在,不適用於^?九。有沒有辦法將它以某種方式應用於ix? –