Top all-time · #2819
Chris Penner
Personal blog · chrispenner.ca/postsprogramming
Chris Penner's personal blog at chrispenner.ca covers programming. Since 2015, 27 different Hacker News readers have linked it 35 times, most often “Beating Decades of Optimized C with 80 Lines of Haskell”. It is still writing: the last post was on 2025-11-11, and you can follow it by feed.
Too few sampled comments (7) to say how often HN recommends it.?
Why HN links it
HN commenters link these posts on the expressiveness spectrum of Applicative, Selective, Monad and Arrow abstractions, on event sourcing and effects, and on word-counting performance and Haskell parallel word counting.
Summarised by Claude from a sample of 7 HN comments that link here. Each comment is marked recommending, critical or neutral (citing without judging); how this works.
The Personal blog and musings of Chris Penner, a designer, developer and future opsimath.
Most-linked posts?
- Beating Decades of Optimized C with 80 Lines of Haskell4 people · 4 mentions · first linked 2019-10-15
- Ditch your mutex, you deserve better3 people · 3 mentions · first linked 2025-11-11
- You Should Add Debug Views to Your DB3 people · 3 mentions · first linked 2025-08-15
- Monads are too powerful: The expressiveness spectrum3 people · 3 mentions · first linked 2025-09-27
- Exploring Arrows for Sequencing Effects2 people · 3 mentions · first linked 2025-10-17
- Silly job interview questions in Haskell2 people · 2 mentions · first linked 2020-10-15
- Generalizing 'jq' and Traversal Systems using optics and standard monads2 people · 2 mentions · first linked 2020-10-07
What Hacker News says?
Luckily, that very article exists! https://chrispenner.ca/posts/wc Edit: upon reading the article it seems like the'yre different kinds of word counting. Still interesting and worth reading nevertheless!
Comment linking /posts/wc
on “Performance comparison: counting words in Python, Go, C++, C, Awk, Forth, Rust”Submitted Tail recursion in Python as a story · 193 points
HN discussionYes, there are a number of them. Here are some examples off the top of my head: - Moggi was studying the problem of equivalence of programs, and noted that the traditional approach to modeling a program as a total function Input -> Output is problematic. He pioneered the use of monads and Kleisli categories as a foundation for reasoning about equivalence of real programs, including all the real-world nastiness like…
Comment linking /posts/traversal-systems
on “Category Theory in Programming”Submitted Beating Decades of Optimized C with 80 Lines of Haskell as a story · 162 points
HN discussionI'm experimenting with this for client-server design in game development, to ensure that the clients are in sync with the server: since the only way to change the game state is through events, I (as a developer) am unable to forget to implement some notification for something that happens. This also gets me match replays as an extra. I came across the Update Monad [1] while researching how to use Event Sourcing in f…
Comment linking /posts/update-monad
on “Event Sourcing (2005)”Submitted Generalizing 'jq' and Traversal Systems using optics and standard monads as a story · 161 points
HN discussion> Why is this taken as a given to be a good thing? So that we can prove things about software more easily. If we only write stateful imperative programs, we're stuck with tons of Hoare triples and separation logic rather than being able to use equational reasoning or type-driven deductions. For example, this person wrote a parallel wc in Haskell, and they used semigroups to parallelize the word counting. https://chr…
Comment linking /posts/wc
on “Total Functional Programming (2004) [pdf]”Submitted Ditch your mutex, you deserve better as a story · 139 points
HN discussiontook a bit less than five years :) https://chrispenner.ca/posts/arrow-effects
Comment linking /posts/arrow-effects
on “Monads are too powerful: The expressiveness spectrum”Submitted Silly job interview questions in Haskell as a story · 90 points
HN discussionNow we're just having a semantic argument over the word "expressiveness", which is not especially interesting; see https://chrispenner.ca/posts/expressiveness-spectrum . My argument above remains true regardless of the terms you choose to use.
Comment linking /posts/expressiveness-spectrum
on “How Our Rust-to-Zig Rewrite Is Going”Submitted You Should Add Debug Views to Your DB as a story · 89 points
HN discussionhttps://chrispenner.ca/posts/expressiveness-spectrum has some good examples showing why one might want selectives (then continues to explore arrows https://chrispenner.ca/posts/arrow-effects )
Comment linking /posts/arrow-effects
on “Selective Applicative Functors”Submitted Monads are too powerful: The expressiveness spectrum as a story · 66 points
HN discussionSubmitted Optics and Regex: Greater than the sum of their parts as a story · 24 points
HN discussionSubmitted Ditch your (mut)ex, you deserve better as a story · 16 points
HN discussionSubmitted Ditch your (mut)ex, you deserve better as a story · 16 points
HN discussionSubmitted Beating Decades of Optimized C with 80 Lines of Haskell as a story · 14 points
HN discussionSubmitted Monads Are Too Powerful: The Expressiveness Spectrum as a story · 5 points
HN discussionSubmitted Using traversals to batch database queries as a story · 4 points
HN discussionSubmitted Silly job interview questions in Haskell as a story · 3 points
HN discussionSubmitted Vim vs. Emacs; is it really a competition? as a story · 3 points
HN discussionSubmitted A Practical Introduction to Finger Trees as a story · 2 points
HN discussionSubmitted ASTs with Fix and Free as a story · 2 points
HN discussionSubmitted Add debug views to your DB as a story · 2 points
HN discussionSubmitted Building Type Search for Unison as a story · 2 points
HN discussionSubmitted Exploring Arrows for Sequencing Effects as a story · 1 points
HN discussionSubmitted Add debug views to your DB as a story · 1 points
HN discussionSubmitted Building Industrial Strength Software Without Unit Tests as a story · 1 points
HN discussionSubmitted Simpler and safer API design using GADTs as a story · 1 points
HN discussion