<div dir="ltr"><br><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Thank you so much for all the info !  Really appreciate it.<br></blockquote><div><br></div><div>My pleasure!<br><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
however, i'm unclear why you didn't just use<br>
<br>
  eithers = map (\x -> lookupEither (uppercase x) assocs) xs<br>
<br>
instead of mapping everything to uppercase first.<br></blockquote><div><br></div><div>Two reasons:<br><br></div><div>1) I thought it would be slightly more readable.<br></div><div>2) There's no performance penalty.<br><br></div><div>My version looks like it traverses the list twice, but it doesn't because laziness. Where the compiler for a strict language might make an intermediate, uppercased list, Haskell will produce the uppercase values as they are needed.<br><br></div><div>To prove that to myself, I ran a quick <a href="https://hackage.haskell.org/package/criterion">criterion</a> benchmark. If anything, inlining the call to uppercase <i>decreases</i> performance slightly.<br></div><div><br></div><div>Incidentally, that's the same reason why the `filterMap` function you asked about earlier doesn't exist. You can just do `(map f . filter p) xs`. The values will be created lazily, with no intermediate list.<br> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
meanwhile i need to get with the list comprehension program.  i use python list comprehensions all the time, and yet i continue to use map in haskell. how weird is that ?<br></blockquote><div><br></div><div>Not super weird. In my experience listcomps (and their relatives) are much more common in idiomatic Python than idiomatic Haskell. <br><br>Still something you'll want to know how to do, though. Think '|' = 'for', '<-' = 'in' and ',' = 'if' and you'll be fine.<br></div></div></div>