Skip to content
HomeVideosBooksBlogs
AllTop postsTopics
Podcasts
HistoryListsWatch laterLiked videosFollowing

The videos, books, blogs and podcasts Hacker News keeps recommending, all in one place.

VideosBooksBlogsPodcastsAboutPrivacySettings

Data from Hacker News, HackerTube, HackerBooks, HackerBlogs and Open Library. Credits · Not affiliated with Y Combinator.

HomeVideosBooksBlogsPodcasts
Ctrl K
    C

    Chris Penner

    chrispenner.ca · Personal blog · on HN since 2015

    Chris Penner writes about Haskell, functional programming, optics, monads, and software design patterns.

    Visit blogRSSHN submissions
    Languages & CompilersProgramming
    What HN says

    Commenters point to his posts on expressiveness and arrows for examples, and one cites his approach for keeping game clients in sync with a server.

    Stats for nerds
    27HN people shared it
    27linked in comments
    1Kstory points
    Jul 2026last shared
    2021people per year2026

    Top posts on HN

    1. 1
      Tail recursion in Python
      1 person · 193 points · first shared 2018 · 80 comments on HN
    2. 2
      Beating Decades of Optimized C with 80 Lines of Haskell
      4 people · 176 points · first shared 2019 · 185 comments on HN
    3. 3
      Ditch your mutex, you deserve better
      3 people · 171 points · first shared 2025 · 203 comments on HN
    4. 4
      Generalizing 'jq' and Traversal Systems using optics and standard monads
      2 people · 161 points · first shared 2020 · 98 comments on HN
    5. 5
      Silly job interview questions in Haskell
      2 people · 93 points · first shared 2020 · 70 comments on HN
    6. 6
      You Should Add Debug Views to Your DB
      3 people · 92 points · first shared 2025 · 38 comments on HN
    7. 7
      Monads are too powerful: The expressiveness spectrum
      4 people · 71 points · first shared 2025 · 65 comments on HN
    8. 8
      Optics and Regex: Greater than the sum of their parts
      1 person · 24 points · first shared 2019 · 7 comments on HN
    9. 9
      Using traversals to batch database queries
      1 person · 4 points · first shared 2025 · 1 comments on HN
    10. 10
      ASTs with Fix and Free
      2 people · 3 points · first shared 2018 · Discussion on HN

    What HN people wrote when they linked it

    • matt-noonanDec 2024

      Yes, 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 non-termination, partiality (e.g. throwing an exception that kills the program), non-determinism, and so on. https://person.dibris.unige.it/moggi-eugenio/ftp/lics89.pdf

      - Linear logic (and it's close relative affine logic) was the inspiration behind Rust's ownership model, from what I understand. Linear logic was originally described in terms of the sequent calculus by Girard (http://girard.perso.math.cnrs.fr/linear.pdf), but later work used certain categories as a model of linear logic (https://ncatlab.org/nlab/files/SeelyLinearLogic.pdf). This answered and clarified a number of questions stemming from Girard's original work.

      - Cartesian-closed categories (CCCs) form models of the simply-typed lambda calculus, in the sense that any lambda term can be interpreted as a value in a CCC. Conal Elliott pointed out that this means that a lambda term doesn't have just one natural meaning; it can be given a multitude of meanings by interpreting the same term in different CCCs. He shows how to use this idea to "interpret" a program into a circuit that implements the…

    • rphlnAug 2021

      I'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 functional languages: it basically has the same guarantees of only changing the state through recorded events. Beware though, as it can be quite slow if implemented naively.

      [1]: https://chrispenner.ca/posts/update-monad

    • trealiraMar 2024

      > 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://chrispenner.ca/posts/wc

    • kibwenJul 2026

      Now 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.

    • sullyj3Mar 2021

      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!

    • internet_pointsJan 2026

      https://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 )

    Related

    Haskell for Allhaskellforall.com190 people

    The category design pattern

    Haskell for All
    Personal · last shared 2026
    Simon Marlowsimonmar.github.io30 people

    Haskell in the Datacentre

    Simon Marlow
    Personal · last shared 2026
    A Neighborhood of Infinityblog.sigfpe.com185 people

    Why is nuclear fusion so hard?

    A Neighborhood of Infinity
    Personal · last shared 2026
    Michael Snoymansnoyman.com52 people

    Haskell: The Bad Parts, part 2 (2020)

    Michael Snoyman
    Personal · last shared 2024
    fdiv.netfdiv.net16 people

    Objectivist C

    fdiv.net
    Personal · last shared 2026
    Monday Morning Haskellmmhaskell.com26 people

    Real World Haskell

    Monday Morning Haskell
    Company · last shared 2025
    Bryan O'Sullivanserpentine.com49 people

    Github is making me feel stupid(er)

    Bryan O'Sullivan
    Personal · last shared 2021
    FP Complete Blogfpcomplete.com201 people

    Monads and GATs in Nightly Rust

    FP Complete Blog
    Company · last shared 2025