You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I regularly find myself in the need of splitting a map into two maps. For that we currently have these two functions:
split :: Ord k => k -> Map k a -> (Map k a, Map k a)
splitLookup :: Ord k => k -> Map k a -> (Map k a, Maybe a, Map k a)
Usually, split is useless to me because information (the element right on the border) gets lost. splitLookup preserves the information, but often I want the element at the border to simply be in one of the two output maps. So I would like to see
splitL :: Ord k => k -> Map k a -> (Map k a, Map k a)
splitR :: Ord k => k -> Map k a -> (Map k a, Map k a)
with these properties
uncurry union (splitL k m) == m
uncurry union (splitR k m) == m
all (<= k) (keys (fst (splitL k m))
all (> k) (keys (snd (splitL k m))
all (< k) (keys (fst (splitR k m))
all (>= k) (keys (snd (splitR k m))
I was pointed to splitAntitone, which solves this nicely (via splitL k = splitAntitone (<= k) and splitR k = splitAntitone (< k)) . Closing for now, unless people speak up who really want these convenience functions.
I regularly find myself in the need of splitting a map into two maps. For that we currently have these two functions:
Usually,
split
is useless to me because information (the element right on the border) gets lost.splitLookup
preserves the information, but often I want the element at the border to simply be in one of the two output maps. So I would like to seewith these properties
#167 is related.
I will bring this before the libraries list; this issue is mostly for future reference and discoverability.
The text was updated successfully, but these errors were encountered: