I stumbled over Bart de Goede’s article on building a full-text search engine in 150 lines of Python, and was reminded of my quest to show how useful Haskell is for solving real-world problems. Python is an eminently practical language, so nobody is surprised this can be done in Python. But Haskell? The Python code spends a lot of time updating mutable dictionaries. Surely we cannot easily port this code over to Haskell.
Let’s find out.
“Since we are talking about aggregating documents into an index, the word semigroup might pop into our heads.”
This is why Haskell tutorials have a bad rep. Why not use a common English term like “monoid” instead?
Snark aside, the
<>
approach to solving the problem piecewise and aggregating the results into a larger instance of the same type is a really convenient approach.Not only is it convenient, it also enables parallelism:
“How to Think about Parallel Programming: Not!” - Guy L. Steele Jr. (Strange Loop 2010)
Yes! Steele’s Fortress-era talks are amazing. Really thought-provoking.
Yes! Steele’s Fortress-era talks are amazing. Really thought-provoking.