Adding a "Map k a -> Set (Arg k a)" function to containers

David Feuer david.feuer at gmail.com
Fri Jan 28 01:34:15 UTC 2022


I have one minor operational concern. Set is strict in its keys, so code
doesn't have to check whether a key is evaluated when case matching on it.
Arg, on the other hand, is lazy in both arguments. So this function throws
away evaluatedness information, which is always a bit sad.

Separately, I'd love see:

1. A function going the other way.
2. Unsafe mapMonotonic-style functions generalizing both.

On Thu, Jan 27, 2022, 8:25 PM Joseph C. Sible <josephcsible at gmail.com>
wrote:

> I opened https://github.com/haskell/containers/issues/814 about adding
> this function to the containers package:
>
> import qualified Data.Map.Internal as Map
> import qualified Data.Set.Internal as Set
> import Data.Semigroup (Arg(..))
>
> mapToArgSet :: Map.Map k a -> Set.Set (Arg k a)
> mapToArgSet Map.Tip = Set.Tip
> mapToArgSet (Map.Bin sz k v l r) = Set.Bin sz (Arg k v) (mapToArgSet
> l) (mapToArgSet r)
>
> Does anyone have any suggestions or improvements for this? In
> particular, I'm sure there's a less clunky name that I just can't
> think of.
>
> Thanks,
>
> Joseph C. Sible
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/libraries/attachments/20220127/073efa5d/attachment.html>


More information about the Libraries mailing list