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

    Haskell for All

    haskellforall.com · Personal blog · on HN since 2012

    Gabriel Gonzalez writes about Haskell, functional programming patterns, type classes, and practical tooling like shell scripting.

    Visit blogRSSHN submissions
    Languages & CompilersProgramming
    What HN says

    Commenters praise Gabriel's work and link his posts, such as 'Scrap your type classes', though one says that idea never caught on because of poor ergonomics.

    Stats for nerds
    190HN people shared it
    176linked in comments
    4Kstory points
    Aug 2026last shared
    2013people per year2026

    Top posts on HN

    1. 1
      The category design pattern
      8 people · 314 points · first shared 2012 · 156 comments on HN
    2. 2
      Use Haskell for shell scripting
      8 people · 219 points · first shared 2015 · 103 comments on HN
    3. 3
      Why I Prefer Functional Programming
      1 person · 202 points · first shared 2020 · 117 comments on HN
    4. 4
      Firewall rules: not as secure as you think
      2 people · 193 points · first shared 2024 · 82 comments on HN
    5. 5
      Introductions to advanced Haskell topics
      2 people · 190 points · first shared 2014 · 38 comments on HN
    6. 6
      Advice for Haskell beginners (2017)
      3 people · 189 points · first shared 2017 · 59 comments on HN
    7. 7
      The visitor pattern is essentially the same thing as Church encoding
      3 people · 181 points · first shared 2021 · 134 comments on HN
    8. 8
      Spreadsheet-like programming in Haskell
      2 people · 148 points · first shared 2014 · 47 comments on HN
    9. 9
      Fast Fibonacci numbers using Monoids
      2 people · 148 points · first shared 2020 · 40 comments on HN
    10. 10
      How to contribute to the Haskell ecosystem
      2 people · 139 points · first shared 2015 · 20 comments on HN

    What HN people wrote when they linked it

    • ixmatusMay 2014

      Someone told me this: with Haskell you end up reading a lot more up-front than you do "playing around" up-front. The reason for this is the type system which can feel like a straight jacket at first unless you understand it well.

      Don't read the monad tutorials. At all. Get a feel for the language with http://learnyouahaskell.com/chapters (you don't need to read the whole thing through, but probably should).

      Once you've played with the basics then you should absolutely read the http://www.haskell.org/haskellwiki/Typeclassopedia which gives you a very thoroughly walking through of the Type System and is essential but heavy reading to be at all productive with Haskell.

      After that make sure you are using Hoogle to search for functions that already exist!!! http://www.haskell.org/hoogle/

      One strategy no one really told me about: search for functions based on their type and less their "name".

      Then after that, Gabriel Gonzalez writes some really great noob-intermediate friendly tutorials on Haskell in-general: http://www.haskellforall.com/ (don't start with his stuff though as you should have familiarity with Haskell basics first!!).

      Once you're proficient, having Hoogle built into your command-line, using CTAGS + codex, Lambdabot + Emacs, and GHC-mod + emacs is pretty crucial to my workflow.

      Hoogle in the commandline is really powerful, CTAGS + codex is basically CTAGS for haskell source files (if you don't know what ctags are look it up), and lambdabot is a powerful tool…

    • mwattsunJan 2022

      Thank you for the examples. I'm really curious to get to the bottom of this. My inspiration has been Erik Meijer, specifically his article "Confessions of a Used Programming Language Salesman. Getting the Masses Hooked on Haskell" [1]. If I understand you correctly, you are implementing lazy evaluation in your when macro, something you call short-circuiting.

      By dropping laziness in strict functional languages such as Scheme, SML, OCaml, Scala, and F#, the purity and semantic beauty of true functional programming is lost. When programming in Haskell, laziness is one of those things that you rely on all the time without noticing it; it is something you only realize once you miss it.

      As for async/await, Erik led the effort to put it in C# and then Dart. I'm assuming he wanted to bring Haskell Continuation Monads [2] to the popular languages.

      I'm building a hobby website, so I got into Blazor because I like C# and was interested in doing it client side. I gave up on it, not because of C# or bad implementation (it's actually great) but because Microsoft has a noisy and bureaucratic way of configuring code that drives me nuts. I went back to Dart because it is amazingly productive on the client side, but now this video [3] shared in this thread makes me think I should give ClojureScript a try.

      [1] http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.72.868&rep=rep1&type=pdf

      [2] https://www.haskellforall.com/2012/12/the-continuation-monad.html

      [3]…

    • theszApr 2026

      It is hard to find market shares of Viaweb and Yahoo at the time of Viaweb's purchase, the best I've found is that Viaweb was bought for 1/4 of Yahoo's net revenue at the time ($49M price/$203 net revenue in 1998). Viaweb was not profitable at the time of purchase, but it had about four people and quite modest hardware costs.

      While there are no companies with $1.5 trillions (4*$380B) of net revenue, the difference is that Anthropic is cash net-negative, has more than 4 people in staff (none of them are hungry artists like PG) and hardware use spendings, I think, are astronomical. They are cash net-negative because of hardware needed to train models.

      There should be more than one company able to offer good purchase terms to Anthropic's owners.

      I also think that Anthropic, just like OpenAI and most of other LLM companies and companies' departments, ride "test set leakage," hoping general public and investors do not understand. Their models do not generalize well, being unable to generate working code in Haskell [1] at the very least.

      [1] https://haskellforall.com/2026/03/a-sufficiently-detailed-spec-is-code

      PG's Viaweb had an awful code as a liability. Anthropic's Claude Code has an awful implementation (code) and produces awful code, with more liability than code written by human.

    • dematzMar 2026

      Idk, while system architecture diagrams look cool and feel informative, I generally don't feel like they actually help you get started working somewhere on a project. Mistake #3 in this article, putting too much in, is part of this.

      So https://www.jerf.org/iri/post/2025/on_layers_and_boxes_and_lines/#diagrams-huh-what-are-they-good-for is an interesting take: put links in your diagram, so it functions as a table of contents. This seems most useful for someone who needs to start working on a project.

      Similarly https://haskellforall.com/2026/02/browse-code-by-meaning asks how to show what's in a repo, but maybe file tree is not best and a diagram with links as table of contents is the answer.

      That said practically speaking, I'm not sure what tooling easily creates working links in a diagram that looks good in any context, for instance mermaid might render on github but not a text editor.

      Of course for other purposes maybe just go crazy with the diagram. I once had a coworker draw this super detailed master diagram, maybe 50-100 things on it, which I was told impressed senior government officials (after my manager recolored all the red to avoid connoting errors). But for the purpose of orienting developers a table of contents with links sounds better.

    • internet_pointsMay 2026

      There are lots of people successfully using agents with Haskell, for example

      * https://github.com/digitallyinduced/ihp/ is mainly written with Claude now

      * https://jappie.me/haskell-vibes.html is gushing over agent-written Haskell

      * https://discourse.haskell.org/t/anti-llm-sentiment-considered-harmful/14008 huge thread about the divisiveness of LLM's from some person who loves using them with Haskell

      I can see how agent coding is a nice fit for Haskell, since LLM's tend to be best at tasks where you can easily verify the output – and GHC lets you easily verify much more of your domain than say Python (sure you can test some of what dynamic typing doesn't catch, but LLM-written tests do not always do what you think they should[0]). At the same time, the LLMs tend to not code golf unless asked to, and they don't care if they have to wait for dependencies to compile, so that takes away the two major Haskell time sinks.

      [0] https://haskellforall.com/2026/05/type-out-the-code#:~:text=scrutinize%20those%20tests

    • TwisolSep 2021

      I agree with your overall point, but I want to dig in on this bit:

      > Not all functional languages have typeclasses or an alternative and convenient way to express these concepts, and in those, it's not so important to understand these notions abstractly.

      This is true only in an especially strict sense. Haskell's typeclasses provide two basic mechanisms: one for associating a dictionary of data with a type, and one for automatically picking / deducing such a dictionary based on a given type. Only the latter is specific to Haskell (and Scala); the first can be performed even in Java, but you have to explicitly pass the desired dictionary (called a "trait") at all call sites. [0]

      I legitimately use traits all the time in Java, and it even has some built-in ones, like Comparator. There's a great paper on the same fundamental technique at [1] (there called "object algebras").

      [0] https://www.haskellforall.com/2012/05/scrap-your-type-classes.html

      [1] https://www.cs.utexas.edu/~wcook/Drafts/2012/ecoop2012.pdf

    Related

    FP Complete Blogfpcomplete.com201 people

    Monads and GATs in Nightly Rust

    FP Complete Blog
    Company · last shared 2025
    Philip Nilssonphilipnilsson.github.io19 people

    Escaping Hell with Monads (2017)

    Philip Nilsson
    Personal · last shared 2026
    Simon Marlowsimonmar.github.io30 people

    Haskell in the Datacentre

    Simon Marlow
    Personal · last shared 2026
    Matt Parsonsparsonsmatt.org57 people

    Write Junior Code

    Matt Parsons
    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
    Existential Typeexistentialtype.wordpress.com157 people

    Haskell Is Exceptionally Unsafe (2012)

    Existential Type
    Personal · last shared 2026
    Jon Sterlingjozefg.bitbucket.org19 people

    Leaving Go

    Jon Sterling
    Personal · last shared 2016
    Don Stewartdonsbot.wordpress.com40 people

    Back to old tricks, or, baby steps in Rust

    Don Stewart
    Personal · last shared 2020