Hacker News

brudgers
Monad Tutorials Timeline wiki.haskell.org

preommr3 hours ago

To explain like two fundamental rules (we can make wrapper types, and do flatmap) I will:

- Write 5 paragraphs setting up an imaginary scenario involving fantasy elements of aliens, dragons, and a magical kindom where they speak using message boxes

- Introduce basic category theory by starting with what a functor is

- Explain all the effects of a monad in such general terms that it basically amounts to anything and everything - since a function can be anything and do everything and it's just function composition

- Write some snippets of Haskell, and just assume that you're familiar with the syntax

- Talk about how delicious burritos are

alperan hour ago

I've read more than my fair share of these tutorials, and I'd like to be proven wrong here but I don't think I've ever seen one that explains what the point of these functional constructs (similarly with Applicative etc.) is.

"You can do IO now." So what? I could do IO before that as well.

Very rarely are practical explanations discussed. Even if they are discussed, the treatment is shallow and useless.

w4rh4wk55 minutes ago

From my experience having used Haskell (a long time ago), the main benefit of Monads is the `do` and <- syntax. Once you got your thing to satisfy the Monad interface, you unlocked the nice syntax for writing code. That, and compatibility with transformers.

Whether this is the best thing since sliced bread or not, is left as an exercise to the reader.

lmman hour ago

amenghra5 minutes ago

From the very beginning of the article (level 1), I don't see what's wrong with code that looks like the following. Early return seems to fix the "typing this makes me feel ill" part? To me, the following code seems perfectly readable without requiring the reader to know about function composition.

  def doFunctionsInSequence1(): Option[Set[Int]] = {
    val r1 = f1(null)
    if(r1.isEmpty) {
      return None
    }

    val r2 = f2(r1.get)
    if(r2.isEmpty) {
      return None
    }

    return f3(r2.get)
  }

armchairhackeran hour ago

I still don’t understand why it’s named from Gnosticism (https://en.wikipedia.org/wiki/Monad_(Gnosticism))

yccs27an hour ago

Monads got their name from monoids (being a monoid in the category of endofunctors). Monoids are equivalent to one-object categories, so the name uses the greek syllable "mono" for one.

urxvtcdan hour ago

Yeah, would like to know as well. I think the applicative functor was originally call "Idiom", another weird name.

[deleted]an hour agocollapsed

gnabgib6 hours ago

cpa4 hours ago

Pretty cool!

I've spent a lot of time wrapping my head around monads; whenever I thought I "got it," I would come across some exotic monad that completely blew my mind. The best way to understand them is not to rely on analogies but just follow the rules—everybody says that, but it took me a while to truly realize it.

See, for example, the Tardis monad or the Cont monad: https://www.reddit.com/r/haskell/comments/446d13/exotic_mona...

ducklord2 hours ago

I tried understanding the rules but actually using it helped me to get it. Especially when I was using a parser combinator to parse a programming language.

cubefox3 hours ago

I understood the monad concept for a few months in university. After the exam was over, I soon stopped understanding it. The same thing happened with the concept of VC dimension. It's kind of interesting, because we usually don't think of "understanding" as something that comes with a time limit.

alperan hour ago

It happens all the time. For a brief period I understood musical notation and rhythm and then it was gone. Similarly I had a time in my life where I knew by feeling whether a French noun was le or la.

[deleted]4 hours agocollapsed

Dig1t3 hours ago

So weird, on the front page at the same time as this: "Biology is a burrito"

When I saw that link it immediately reminded me of this: https://blog.plover.com/prog/burritos.html

>Monads are like burritos

And then a few links down is this link to monad tutorials.

Weird coincidence.

ducklord2 hours ago

> Monads are like burritos https://blog.plover.com/prog/burritos.html

I'm surprised that this tutorial isn't on the wiki.

hn-front (c) 2024 voximity
source