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
    B

    Brian McKenna

    brianmckenna.org · Personal blog · on HN since 2010

    Brian McKenna writes about functional programming, type systems, category theory, and Scala and JavaScript tooling.

    Visit blogRSSHN submissions
    Languages & CompilersProgramming
    What HN says

    Commenters cite his posts as clear explanations of row polymorphism, promises and category theory, and call his type annotation post a great read.

    Stats for nerds
    32HN people shared it
    35linked in comments
    518story points
    Mar 2025last shared
    2011people per year2025

    Top posts on HN

    1. 1
      How to stop functional programming
      4 people · 339 points · first shared 2016 · 122 comments on HN
    2. 2
      Escaping Callback Hell with ClojureScript macros
      1 person · 53 points · first shared 2011 · 4 comments on HN
    3. 3
      Odd Odd Even Proof in Agda
      3 people · 42 points · first shared 2013 · 2 comments on HN
    4. 4
      S-expression Compiler in Scala
      1 person · 25 points · first shared 2011 · 5 comments on HN
    5. 5
      Category Theory for Promises/A+
      3 people · 7 points · first shared 2013 · 1 comments on HN
    6. 6
      WebGL for node.js
      1 person · 6 points · first shared 2010 · Discussion on HN
    7. 7
      Row Polymorphism Isn't Subtyping
      4 people · 5 points · first shared 2013 · Discussion on HN
    8. 8
      Haskell on Heroku
      1 person · 5 points · first shared 2012 · Discussion on HN
    9. 9
      Read-only Guest tmux Sessions
      2 people · 4 points · first shared 2025 · Discussion on HN
    10. 10
      Architecture diagrams should be code
      2 people · 3 points · first shared 2023 · Discussion on HN

    What HN people wrote when they linked it

    • splintercellSep 2017

      With all due respect, I don't think you understand the purpose of currying and partial application. In your defense, the article merely explains what currying is, but does not explain why you need it.

      For instance while writing functional Javascript code, I never curry my methods, instead I use helper methods from functional libraries such as lodash or Ramda to curry.

      Where currying is useful is in cases like this:

      ```javascript
      //Definitions
      const filterUsers = (fieldName, value, users) => //Implementation
      const sortUsersBy = (fieldName, users) => //Implementation
      const takeUsers = (count, users) => //Implementation

      //Without currying
      UserService
      .getUsers()
      .then(users => filterUsers('active', true, users))
      .then(users => sortUsersBy('age', users))
      .then(users => takeUsers(3, users));

      //If these methods were curried
      UserService
      .getUsers()
      .then(filterUsers('active', true))
      .then(sortUsersBy('age'))
      .then(takeUsers(3));
      ```

      Here is a video which explains proper uses of currying (and does it very well) [1]. Here is another article if your coworker start using functional programming and you want to stop them [2].

      1. https://www.youtube.com/watch?v=m3svKOdZijA

      2. https://brianmckenna.org/blog/howtostopfp

    • coolsunglassesApr 2017

      >2. Tail recursion doesn't really make much of a difference for walking trees, which is recursive, but (mostly) not tail recursive.

      Non-strictness helps here more than TCO in a strict language.

      >4. ADTs can be good or bad for describing ASTs. Once you enrich ASTs with semantics shared by all variants (such as source coordinates), inheritance can become a better fit than ADTs.

      Since this article was written we have better ways of augmenting/annotating ASTs. There's a lot of this out there, but here's one example: https://brianmckenna.org/blog/type_annotation_cofree

      There are other alternatives that are like inheritance but with better reasoning properties as well. Finally tagless comes to mind.

      >I also generally find it better to explicitly annotate functions with types.

      This Haskeller whole-heartedly agrees for all the reasons stated.

    • pufuwozuMay 2011

      I wrote a small tutorial on manually setting up Android with Scala:

      http://brianmckenna.org/blog/minimalist_android_scala_env

      Enabling ProGuard is done by adding the following to build.xml:

      <target name="-debug-obfuscation-check">
      <property name="proguard.enabled" value="true" />
      <path id="out.dex.jar.input.ref" />
      </target>

      Also add "proguard.config=proguard.cfg" to default.properties and "-dontwarn" to proguard.cfg.

    • glibgilMar 2018

      Some languages use polymorphic row types and eschew inheritance

      https://brianmckenna.org/blog/row_polymorphism_isnt_subtyping

      https://www.reddit.com/r/types/comments/73lg05/comment/dnt7q5p

      https://noamlewis.wordpress.com/2015/01/20/introducing-sjs-a-type-inferer-and-checker-for-javascript/

      https://github.com/purescript/documentation/blob/master/language/Types.md

    • cstrahanJul 2023

      That made me chuckle.

      For those not familiar with the promise design controversy:

      http://brianmckenna.org/blog/category_theory_promisesaplus

      https://github.com/promises-aplus/constructor-spec/issues/24

      https://github.com/promises-aplus/promises-spec/issues/94

    • BalinKingJan 2018

      I read about isomorf yesterday... it might be kinda like what you're looking for?

      Possibly relevant blog post from Brian McKenna, too: https://brianmckenna.org/blog/polymorphic_programming

      [1] https://isomorf.io/

    Related

    Stephen Diehlstephendiehl.com209 people

    What I Wish I Knew When Learning Haskell

    Stephen Diehl
    Personal · last shared 2026
    FP Complete Blogfpcomplete.com201 people

    Monads and GATs in Nightly Rust

    FP Complete Blog
    Company · last shared 2025
    Jenksterblog.jenkster.com28 people

    Which Programming Languages Are Functional?

    Jenkster
    Personal · last shared 2026
    LispCastlispcast.com108 people

    React: Another Level of Indirection

    LispCast
    Personal · last shared 2022
    Haskell for Allhaskellforall.com190 people

    The category design pattern

    Haskell for All
    Personal · last shared 2026
    Brian Carperbriancarper.net48 people

    Making an RPG in Clojure (2010)

    Brian Carper
    Personal · last shared 2017
    Bryan O'Sullivanserpentine.com49 people

    Github is making me feel stupid(er)

    Bryan O'Sullivan
    Personal · last shared 2021
    Chris Allenbitemyapp.com35 people

    Why the poor are poor

    Chris Allen
    Personal · last shared 2025