you are viewing a single comment's thread
view the rest of the comments
[–] 32 points 1 year ago* (last edited 1 year ago) (6 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)
  • source
  • hideshow 6 child comments
  • [–] 4 points 1 year ago (4 children)

    Isn't your example just the builder pattern?

  • source
  • parent
  • hideshow 4 child comments
  • [–] 4 points 1 year ago (2 children)

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

  • source
  • parent
  • hideshow 2 child comments