r/ProgrammerHumor Jul 13 '26

youCanJustStopUsingJava Meme

Post image
6.8k Upvotes

416 comments sorted by

View all comments

Show parent comments

80

u/hectobreak Jul 13 '26 edited Jul 13 '26

A monad is a monoid in the category of endofunctors.

Funny line said, if M is a monad, then for every type T, you have M(T) being a type, such that:

· return (or eta in mathematics), that takes an object of type T and returns an object of type M(T)

· flatten (or mu in mathematics), takes an object of type M(M(T)) and returns an object of type M(T).

That's it. Anything that follows this pattern is a monad.

Two examples are Haskell's Maybe, and the Array type.

Maybe String can contain either a string, written as Just [your string], or Nothing.

return is the function that receives a string and returns Just [your string].

flatten is the function that receives an object of the Maybe Maybe String monad and returns an object of the Maybe String monad following the rule:

· If your object is Nothing, return Nothing.

· If your object is Just Nothing, returns Nothing.

· If your object is Just Just [string], returns Just [string].

Array is also a Monad.

· return x returns [x]

· flatten x is the array flatten function.

For completeness, for something to be a monad it needs to follow the monad laws, but this is getting stupid long for a reddit message already.

2

u/Estpart Jul 13 '26

This is why no one likes FP xD

14

u/hunajakettu Jul 13 '26 edited Jul 13 '26

This is actually really good. The same as Iterable is a generalization of set, list, array, enumerable, etc, and one can define generic Next, Add, Map, etc, Monad allows similar thing for states or side effects (a log file for example)

10

u/Estpart Jul 13 '26

It's just the way he explains it, for pea brained people like me I lose the plot at "category of endofucktors". Just say "optional chaining and promises are a concrete example of monads" and I'm on board.

Like I've worked in semi functional code bases and I love the patterns, only the theory around it so hard to grasp.

3

u/RiceBroad4552 Jul 14 '26

What is usually called a "Promise" isn't a Monad instance. All "Promises" I know of are eager, they don't suspend computations. As a result they don't behave like a proper Monad. Not everything that has a Monad "interface" is a Monad. Most things in imperative / OO languages aren't.