## Wednesday, October 21, 2020

• 2020-10-21: Curry `key` from
`secondPassFilter :: Ord a => a -> Set a -> Maybe bsecondPassFilter key = spf key . Set.lookupGE key`
Given `spf :: a -> Maybe a -> Maybe b`
• 2020-10-21: given: `updater :: b -> Maybe b`
and `firstPass :: Ord a => Map a b -> Map a b`
`firstPass m = foldr (Map.update updater) m (Map.keys m)`
#Curry away `m` from the firstPass-function
• Social Justice Cleric @noaheasterly
`firstPass = foldr (Map.update updater) <*> Map.keys`
• 2020-10-20: `all (\c -> any (`isPrefixOf` c) setb) notinb`
#Curry away the `c` lambda argument.

## Friday, October 9, 2020

• 2020-10-27: Military alliances from a @wikidata query.
• 2020-10-26: Today's #haskell problem captures the Cypher of countries, continents, and airbases.
• 2020-10-23: Today's #haskell problem: "Unicode? What, even, is that?" ... sez Haskell, smh.  Also, if you know how to get Text not to escape unicode points on output (to, say, a REST endpoint), much obliged if you told me this dark magic. Today's #haskell solution shows airbases (with their associated countries) added to the graph database

• 2020-10-20: Next evolutionary step. We have Continents and countries as data structures. For today's #haskell problem let's find out how we can (can't?) merge in airbases with countriesHoo, doggies! "Upload airbases to the graph database!" he said. "It'll be easy!" he said. Today's #haskell solution, if not in book-form, then in book-length!
• 2020-10-16: Map of a -> b or b -> a? ... If you're asking that question, why not Graph? Today's #haskell exercise. A mapping of continents to countries. Surprisingly, wikidata.org does not have this as data amenable to extraction.

• 2020-10-15: From continent->country mapping to country->continent mapping for today's #haskell problem. `sequence` is the secret-sauce for today's #haskell solution.
• 2020-10-14: Today's #haskell problem is to get countries by continent from a ... 'markdown' file? That is not markdown. Deal with it. Countries: meet your Continents.
• 2020-10-13: Okay. #StringsAreWrong. Everybody knows this. Wikidata: "Let's encode LongLats as strings ... IN JSON!" Please let's not. Today's #haskell exercise. The solution that produces airbases with lat/longs. REAL lat/longs, smh.
• 2020-10-12: Today's #haskell problem is airbases of the world from wikidata.org ... with some duplicates. Today's #haskell solution reads in JSON, even ... 'JSON' that encodes 'LongLat's (not lat/longs) as ... strings? Really? Yes, even points-as-strings. Remember: #StringsAreWrong ~ Richard A. O'Keefe, 26 April 1994
• 2020-10-09: Today's #haskell problem is this: Production data: "Let's see if we can make the simple act of parsing a 'JSON file' [that isn't a JSON file] impossible for the ol' el geophf!" Nice try, production data. Nice try.

## Tuesday, September 1, 2020

• February 18th, 2019:
Define ext :: (Maybe a, b) -> Maybe (a,b)
e.g.: ext (Just 5, "Hi") = Just (5, "Hi")
• Al͜l ̸͑ha͂͟il̶! @TechnoEmpress \o/
• cλementd @clementd `fmap swap. sequenceA . swap` :-)
• Raveline @Raveline bisequence . second pure
• Alexey Radkov @sheshanaag uncurry (flip \$ fmap . flip (,))
• a fool @fresheyeball ext = \case (Just x, y) -> Just (x, y); _ -> Nothing

• 2020-09-08: given

```removeInfreqs :: Set String -> Ontology -> Ontology
removeInfreqs infrequentWords ont =
Map.map (\wordcounts -> foldl (flip ri') wordcounts infrequentWords) ont```

where `Ontology` is a map-of-maps.

1. remove `flip` to get the same functional result.
2. curry away `ont` from the function `removeInfreqs`
3. curry away `wordcounts` from the map-lambda function.
4. curry away `infrequentWords` from the function `removeInfreqs`

n.b.: This curry may not be as straightforward as the other curries.

• 2020-09-01: Given all of the above, and now that you've curried the above lambda to [SPOILER]:

`\key -> const (not (Set.member key stoppers))`

Curry away `key` from this new lambda.

## Wednesday, August 26, 2020

• 2020-08-31:

```>>> :t Map.filterWithKey
Map.filterWithKey :: (k -> a -> Bool) -> Map k a -> Map k a```

we have this filtering function: `\key _val -> not (Set.member key stoppers)`

`_val` is unused. Curry it away.

• 2020-08-28:
`rmFront :: Set Char -> String -> StringrmFront weirds str = dropWhile (flip Set.member weirds) str`
Simple currying questions: can this function-implementation be simplified with currying? Can it be simplified ... MORE? Answers: yes, and yes. Show your implementation.

• 2020-08-26: We have this: `\info -> importBook info >>= return . (info,)` There are way too many `info`-references. What's a better way to write this expression?
• Five solutions from @noaheasterly:
• runKleisli (id &&& Kleisli importBook)
• liftA2 (liftA2 (,)) return importBook
• liftA2 (fmap . (,)) id importBook
• traverse importBook . join (,)
• traverse importBook . (id &&& id)