Proposal: Add splitL and splitR to container’s Map APIs

Joachim Breitner mail at joachim-breitner.de
Tue Jan 31 20:05:38 UTC 2017


Hi,

good point. I am on an older version, so I did not see that function
yet.


Indeed that function would nicely solve my use case, and

    spanAntitone (<=k)

isn’t much longer than my proposed

    spanLE k


The proposal still stands for the question of convenience, but the need
is much less now.

Greetings,
Joachim

Am Dienstag, den 31.01.2017, 14:54 -0500 schrieb David Feuer:
> We recently added
> 
> spanAntitone :: (k -> Bool) -> Map k a -> (Map k a, Map k a)
> 
> I believe that should get you all the logarithmic splits you want of
> this type. The only question is whether we should add the simpler
> proposed functions for convenience.
> 
> 
> On Jan 31, 2017 2:45 PM, "Joachim Breitner" <mail at joachim-breitner.de
> > wrote:
> Hi,
> 
> 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))
> 
> These new functions should be added to Data.Map, Data.IntMap (in both
> variatans each) and, for consistency, Data.Set.
> 
> Alternative names (in correspondence with
> Data.Set.lookup{LT,LE,GT,TE})
> would be splitLE (instead of splitL) and splitLT (instead of splitR).
> 
> Corresponding issue: https://github.com/haskell/containers/issues/387
> Discussion period:   2 weeks (until Feb 14).
> 
> Greetings,
> Joachim
> 
> --
> Joachim “nomeata” Breitner
>   mail at joachim-breitner.dehttps://www.joachim-breitner.de/
>   XMPP: nomeata at joachim-breitner.de • OpenPGP-Key: 0xF0FBF51F
>   Debian Developer: nomeata at debian.org
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
> 
> 
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
-- 
Joachim “nomeata” Breitner
  mail at joachim-breitner.dehttps://www.joachim-breitner.de/
  XMPP: nomeata at joachim-breitner.de • OpenPGP-Key: 0xF0FBF51F
  Debian Developer: nomeata at debian.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part
URL: <http://mail.haskell.org/pipermail/libraries/attachments/20170131/2036f795/attachment.sig>


More information about the Libraries mailing list