Ich benutze das Linsenpaket und denke immer, es muss eine einfache Lösung für das folgende Problem geben. Sagen, dass ich eine Karte (oder jede At
Instanz) und eine Linse auf seinem Wert Typ, dhKomponieren von Teilgettern mit der Objektivbibliothek
aMap :: Map Int a
aLens :: Simple Lens a b
ich ein Getter
g :: Getter (Map Int a) (Maybe b)
Dies ist, weil ich oft so etwas wie diese
will tun wollenx :: Maybe b
x = aMap^.at 3.g.aLens
die beabsichtigte Semantik natürlich sein, dass Sie einen Just
Wert erhalten, wenn Sie so in dem at
Lookup und Nothing
anders.
Wenn man anstatt sich anstelle von g
traverse
Werkseinstellung, dh
newMap = at 3.traverse.aLens .~ whatever $ aMap
aber nicht, wenn Sie bekommen. Gibt es eine fertige Linse in der Bibliothek, die ich einfach vermisst habe, oder gibt es eine andere einfache Möglichkeit, dies in einem einzigen Ausdruck zu erreichen?