These functions have been specialised for use with DMap but without any of the
specific lens types used so that we have compatibility without needing the
dependency just for these functions.
This is equivalent to the at Lens' from Control.Lens.At:
type Lens s t a b = forall f. Functor f => (a -> f b) -> s -> f t
at :: Index m -> Lens' m (Maybe (IxValue m))
So the type of dmat is equivalent to:
dmat :: GCompare k => Lens' (DMap k f) (Maybe (f v))
DMap.fromList [AInt :=> Identity 33, AFloat :=> Identity 3.5] & dmat AString ?~ "Hat"DMap.fromList [AString :=> Identity "Hat", AInt :=> Identity 33, AFloat :=> Identity 3.5]
DMap.fromList [AString :=> Identity "Shoe", AInt :=> Identity 33, AFloat :=> Identity 3.5] ^? dmat AFloatJust (AFloat :=> 3.5)