我正在使用鏡頭包,並且一直在考慮必須有一個簡單的解決方案來解決以下問題。說我有一些地圖(或任何At
實例)和它的價值型鏡頭,即使用鏡頭庫編寫部分吸氣劑
aMap :: Map Int a
aLens :: Simple Lens a b
我想一個getter
g :: Getter (Map Int a) (Maybe b)
這是因爲我經常想這樣做
x :: Maybe b
x = aMap^.at 3.g.aLens
當然,預期的語義是,你得到一個Just
值,當你在at
查找和Nothing
這樣做,否則。
當一個人設定,而不是領traverse
作品代替g
,即
newMap = at 3.traverse.aLens .~ whatever $ aMap
但不是當你得到。是否有一些已經內置在鏡頭庫的鏡頭,我只是錯過了,還是有另一種簡單的方法來實現這一點在一個單一的表達?