
Discussion has gotten going again about harmonizing between the names findWithDefault and lookupDefault in containers and unordered-containers: findWithDefault :: Ord k => a -> k -> Map k a -> a lookupDefault :: (Eq k, Hashable k) => a -> k -> HashMap k a -> a I've been fairly unenthusiastic about adding extra names for this function in one package or the other, in large part because I don't like the function. I'd much rather have something in the spirit of `either`, `maybe`, `bool`, etc.: lurkup :: Ord k => r -> (a -> r) -> k -> Map k a -> r lurkup r f k = maybe r f . lookup k lookup k = lurkup Nothing Just k Unfortunately, I haven't been able to come up with a decent name for this function. Can anyone help?

Could you share why you are more enthusiastic about such a function? On Mon, 8 Jun 2020, at 8:07 PM, David Feuer wrote:
Discussion has gotten going again about harmonizing between the names findWithDefault and lookupDefault in containers and unordered-containers:
findWithDefault :: Ord k => a -> k -> Map k a -> a lookupDefault :: (Eq k, Hashable k) => a -> k -> HashMap k a -> a
I've been fairly unenthusiastic about adding extra names for this function in one package or the other, in large part because I don't like the function. I'd much rather have something in the spirit of `either`, `maybe`, `bool`, etc.:
lurkup :: Ord k => r -> (a -> r) -> k -> Map k a -> r lurkup r f k = maybe r f . lookup k lookup k = lurkup Nothing Just k
Unfortunately, I haven't been able to come up with a decent name for this function. Can anyone help? _______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries

I know I've had cases where I didn't have a good default `a` but did have
an `r` (and I wanted to apply a function to the result if there was a value
in the Map anyway).
On mobile; please excuse any tpyos.
On Tue, 9 Jun 2020, 5:49 am Oliver Charles,
Could you share why you are more enthusiastic about such a function?
On Mon, 8 Jun 2020, at 8:07 PM, David Feuer wrote:
Discussion has gotten going again about harmonizing between the names findWithDefault and lookupDefault in containers and unordered-containers:
findWithDefault :: Ord k => a -> k -> Map k a -> a lookupDefault :: (Eq k, Hashable k) => a -> k -> HashMap k a -> a
I've been fairly unenthusiastic about adding extra names for this function in one package or the other, in large part because I don't like the function. I'd much rather have something in the spirit of `either`, `maybe`, `bool`, etc.:
lurkup :: Ord k => r -> (a -> r) -> k -> Map k a -> r lurkup r f k = maybe r f . lookup k lookup k = lurkup Nothing Just k
Unfortunately, I haven't been able to come up with a decent name for this function. Can anyone help? _______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
_______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries

On Tue, 9 Jun 2020, Ivan Lazar Miljenovic wrote:
I know I've had cases where I didn't have a good default `a` but did have an `r` (and I wanted to apply a function to the result if there was a value in the Map anyway).
I think I had these cases, too, but "maybe . Map.lookup" would also be ok?

lurkup is essentially lookup returning a CPS-version (Church encoding) of Maybe a. type CMaybe a = forall r. r -> (a -> r) -> r lurkup' :: k -> Map k a -> CMaybe a Is it worth to add a new name for this (above the Fairbairn threshhold)? I am quite happy with writing stuff like fromMaybe d $ Map.lookup k m On 2020-06-08 21:07, David Feuer wrote:
lurkup :: Ord k => r -> (a -> r) -> k -> Map k a -> r lurkup r f k = maybe r f . lookup k

Andreas Abel
lurkup is essentially lookup returning a CPS-version (Church encoding) of Maybe a.
type CMaybe a = forall r. r -> (a -> r) -> r lurkup' :: k -> Map k a -> CMaybe a
Is it worth to add a new name for this (above the Fairbairn threshhold)?
I don’t think so :-)
I am quite happy with writing stuff like
fromMaybe d $ Map.lookup k m
There might be a case for a flipped infix version of this. I see that there are several in various libraries including `orElse` and (?:) more than once.
On 2020-06-08 21:07, David Feuer wrote:
lurkup :: Ord k => r -> (a -> r) -> k -> Map k a -> r lurkup r f k = maybe r f . lookup k
Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
-- Jón Fairbairn Jon.Fairbairn@cl.cam.ac.uk

I usually end up writing your 'lurkup' when I use maps, so I'd like see it included.
I don't have a better name than 'lookupWith'.
And, yeah, lookupDefault has not been useful in practice.
—
Sent from my phone with K-9 Mail.
On June 8, 2020 7:07:13 PM UTC, David Feuer
Discussion has gotten going again about harmonizing between the names findWithDefault and lookupDefault in containers and unordered-containers:
findWithDefault :: Ord k => a -> k -> Map k a -> a lookupDefault :: (Eq k, Hashable k) => a -> k -> HashMap k a -> a
I've been fairly unenthusiastic about adding extra names for this function in one package or the other, in large part because I don't like the function. I'd much rather have something in the spirit of `either`, `maybe`, `bool`, etc.:
lurkup :: Ord k => r -> (a -> r) -> k -> Map k a -> r lurkup r f k = maybe r f . lookup k lookup k = lurkup Nothing Just k
Unfortunately, I haven't been able to come up with a decent name for this function. Can anyone help?
participants (7)
-
Andreas Abel
-
David Feuer
-
Henning Thielemann
-
Ivan Lazar Miljenovic
-
Jon Fairbairn
-
Keith
-
Oliver Charles