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
    A

    Aditya Bhargava

    adit.io · Personal blog · on HN since 2012

    Aditya Bhargava, author of Grokking Algorithms, writes illustrated explanations of functional programming, Haskell, and concurrency.

    Visit blogRSSHN submissions
    ProgrammingLanguages & Compilers
    What HN says

    HN commenters call his pictorial guide to functors, applicatives, and monads the best and simplest explanation of monads they have seen.

    Stats for nerds
    68HN people shared it
    41linked in comments
    1.7Kstory points
    Oct 2025last shared
    2013people per year2025

    Top posts on HN

    1. 1
      Functors, applicatives, and monads in pictures
      43 people · 539 points · first shared 2013 · 125 comments on HN
    2. 2
      I Guess I'm Not A 501 Developer
      1 person · 295 points · first shared 2012 · 178 comments on HN
    3. 3
      Introduction to Calculus with Derivatives
      1 person · 268 points · first shared 2018 · 65 comments on HN
    4. 4
      Haskell Lenses In Pictures
      4 people · 184 points · first shared 2013 · 50 comments on HN
    5. 5
      Git Tips
      1 person · 119 points · first shared 2013 · 22 comments on HN
    6. 6
      How I Made My Ruby Project 10x Faster
      2 people · 103 points · first shared 2013 · 57 comments on HN
    7. 7
      Three Useful Monads
      5 people · 74 points · first shared 2013 · 28 comments on HN
    8. 8
      Grokking Algorithms Is Out
      3 people · 42 points · first shared 2016 · 2 comments on HN
    9. 9
      Locks, Actors and STM in Pictures
      7 people · 13 points · first shared 2013 · Discussion on HN
    10. 10
      The Dining Philosophers Problem With Ron Swanson
      4 people · 8 points · first shared 2013 · Discussion on HN

    What HN people wrote when they linked it

    • actsasbuffoonMar 2015

      I've been learning Haskell for the last year and a half, though I've been working with functionally inspired languages for 8 years. Haskell is wonderful, easily the most fun I've had learning a language in 20 years.

      I'd advise not getting distracted by monads and other glamorous parts of the language. Monads are pretty abstract, and they won't likely make much sense until you've written enough Haskell to feel the pain-points they address.

      I've learned a lot by reading blog posts from these people:

      * Aditya Bhargava: http://adit.io

      * Gabriel Gonzalez: http://www.haskellforall.com/

      * Joseph Abrahamson: http://jspha.com/

      * kqr (I don't know this person's full name. Avatar not withstanding, I'm pretty sure kqr isn't David Bowie): https://github.com/kqr/gists

      * Edward Kmett: https://www.fpcomplete.com/user/edwardk

      Most of all, I advise not getting discouraged. Haskell has a lot of concepts that seem intimidating. Many times I've spent days trying to figure out what the hell a contravariant functor is, only to get really discouraged. At times I've doubted my own abilities and whether learning the language was worth it. I stuck to it, and a year and a half later I'm pretty damn capable with Haskell (and I know what a contravariant functor is!) and I'm having the time of my life learning more about it.

    • LeftiumFeb 2023

      Well, HtDP uses Racket, a flavor of Scheme/Lisp. So HtDP teaches with a functional language. But the contents seem to be about general program/algorithm design. (Like SICP, I started but never finished HtDP.)

      I don't think HtDP/SICP explicitly cover topics from my short list of best introductions to practical FP. For example they don't seem to cover "monads" and "functional composition," which are a big part of practical FP programming.

      "Monad" is a fancy mathematical term for a concept that allows you to write programs without worrying about exceptions/errors/IO cases until the very last moment. So you can keep your "happy" path code completely separate from the "sad" path code. Explained graphically: https://www.adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html

    • actuallyalysJul 2017

      I'm not detaro, but I'll take a crack. It's kind of like traffic—if you're constantly stopping for other cars, it doesn't really help to have a faster car. If the UI thread is waiting for something else to happen, having an entire core dedicated to the UI just means that entire core is waiting. In the case detaro was alluding to, compiling Chrome was creating so many processes, the UI had to wait for the kernel to shut down processes before it could do what the UI needed it to do. [0]

      Adit has some good posts on concurrency:

      —http://adit.io/posts/2013-05-11-The-Dining-Philosophers-Problem-With-Ron-Swanson.html

      —http://adit.io/posts/2013-05-15-Locks,-Actors,-And-STM-In-Pictures.html.

      [0]: https://randomascii.wordpress.com/2017/07/09/24-core-cpu-and-i-cant-move-my-mouse/

    • hardwaresoftonJan 2016

      A tad bit off topic, but for your functional language I'd recommend Haskell. It's given my mind the most trouble out of any of the other functional languages I've tried (which is a good thing). I find it's syntax reasonable, and resources plentiful.

      Excellent lecture series on functional programming (language used is Haskell):

      https://channel9.msdn.com/Series/C9-Lectures-Erik-Meijer-Functional-Programming-Fundamentals/

      When you get to trying to understand monads, DON'T look up monad tutorials, look for functor -> applicative functor -> monad tutorials, like this one:

      http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html

    • alexmingoiaMar 2020

      Feel free to email me if you’re stuck. I’d be happy to help you out.

      I highly recommend spending a little time trying to understand the basics. You might find “Functors, Applicatives, and Monads in Pictures” helpful: http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html

      Type classes, functors, and monads are assumed knowledge in most documentation, as they are foundational concepts in Haskell. Just like math, you must know addition, subtraction, multiplication when learning algebra.

    • whipoodleSep 2017

      This image (and ones like it) is so valuable: http://adit.io/imgs/functors/fmap_def.png

      Every time you read about things even tangentially related to functional programming, you inevitably arrive at a slop of letters with arrows between them. Even just parsing that is rather difficult for non-initiates, let alone trying to grasp what it's actually saying after you've parsed it. Words and arrows (the normal kind of arrows, the kind that are for pointing at things) can help a lot.

    Related

    A Neighborhood of Infinityblog.sigfpe.com185 people

    Why is nuclear fusion so hard?

    A Neighborhood of Infinity
    Personal · last shared 2026
    FP Complete Blogfpcomplete.com201 people

    Monads and GATs in Nightly Rust

    FP Complete Blog
    Company · last shared 2025
    Haskell for Allhaskellforall.com190 people

    The category design pattern

    Haskell for All
    Personal · last shared 2026
    Alexis Kinglexi-lambda.github.io172 people

    Parse, Don’t Validate

    Alexis King
    Personal · last shared 2026
    Runar Bjarnasonblog.higher-order.com21 people

    Maximally Powerful, Minimally Useful

    Runar Bjarnason
    Personal · last shared 2023
    Apocalispapocalisp.wordpress.com23 people

    Imperative vs Functional Programming

    Apocalisp
    Personal · last shared 2025
    Well-Typed Blogwell-typed.com60 people

    Falsify: Hypothesis-Inspired Shrinking for Haskell (2023)

    Well-Typed Blog
    Company · last shared 2026
    Jon Sterlingjozefg.bitbucket.org19 people

    Leaving Go

    Jon Sterling
    Personal · last shared 2016