this post was submitted on 11 Oct 2025
187 points (94.7% liked)

Programmer Humor

26827 readers
2369 users here now

Welcome to Programmer Humor!

This is a place where you can post jokes, memes, humor, etc. related to programming!

For sharing awful code theres also Programming Horror.

Rules

founded 2 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
[–] sirico@feddit.uk 22 points 11 hours ago* (last edited 11 hours ago) (2 children)

God, you guys are idiots, it's so simple

  • You take a Function
  • ?????
  • Result It can't be simpler /s

No joke that's pretty much every example I came across trying to get my head around it :D.

Not sure if using analogies is helpful or just going to be more confusing but, the way I think of a monad is similar to how I used to cook back when I worked in restaurants. I’d prep all my ingredients in small containers so I wouldn’t forget anything, and they’d be ready to go when needed. Then I’d start adding them to the main mixing bowl, one step at a time. If I forgot an ingredient or accidentally flipped the bowl, the recipe would fail — you can’t keep baking after that.

So a monad is like that bowl: if you mess up, it just dumps everything out and resets your little prep bowls, instead of letting you keep going and make a batch of shitty cookies

The “main-bowl” is the monad (the context that holds your values).

The “prep bowls” are the individual values or functions ready to be chained.

The “dump/reset” is the idea that once something goes wrong, the chain stops safely.

And “shitty cookies” are the result of not putting a monad in place and just sending it.

Maybe someone with a more diverse programming background can explain it better. But it's basically a function checker usually wraped in IF ELSE and RETURN.

Some pseudo code in case my analogy doesn't make sense.

def main():
    bowl = get_flour()
    bowl = add_butter(bowl)
    
    if bowl is None:
        return "Recipe failed — restart!"

    bowl = add_sugar(bowl)
    
    if bowl is None:
        return "Recipe failed — restart!"

    return bake(bowl)
[–] Pyro@programming.dev 2 points 3 hours ago (2 children)

Isn't your example just the builder pattern?

[–] Kache@lemmy.zip 1 points 4 minutes ago

Yeah, that explanation is missing the critical point of generically applying functions through flat_map/bind

[–] marcos@lemmy.world 1 points 2 hours ago

A monad is a builder that lets you use previous partial results to make decisions while you build.

[–] camr_on@lemmy.world 4 points 5 hours ago

I like your explanation, that makes a lot of sense