私はレンズ パッケージを使用していますが、次の問題に対する簡単な解決策があるに違いないと考え続けています。いくつかのマップ (または任意のAt
インスタンス) とその値型のレンズがあるとします。
aMap :: Map Int a
aLens :: Simple Lens a b
ゲッターが欲しい
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
しかし、あなたが得ているときではありません。私が単に見逃したライブラリに組み込まれたレンズはありますか、それとも単一の式でこれを達成する別の簡単な方法はありますか?