Monads are like burritos (2009)
Burritos, jokes, and metaphors
- Thread starts with burrito/lasagna/endofunctor jokes; “monads are like burritos” framed as an in‑joke among Haskell programmers.
- Several note that real-world metaphors (burritos, toxic waste, spacesuits, etc.) are mostly shibboleths or clickbait, not real teaching tools.
What is a monad? Practical intuitions
- Described as:
- A way to “chain” computations while threading extra context (errors, absence, async, lists, state).
- “Anything you can flatMap” / “and_then” over, though some argue that over-emphasizing flatMap/chaining causes misconceptions.
- A wrapper around types plus operations like
bindthat specify how to sequence them.
- Common programming examples: Option/Maybe, Result, Future/Promise, IO, lists, streams.
- Some emphasize monads as one abstraction among many (Functors, Applicatives, Monoids), not inherently special.
Monads, IO, and side effects
- Haskell IO is explained as building a “to-do list” or blueprint of effects that the runtime executes.
- IO being a monad is seen as incidental; monads are a convenient way to construct these blueprints while keeping the core language pure.
Teaching monads & the “monad tutorial fallacy”
- Strong theme: explaining monads abstractly or via metaphors often fails; better to:
- Teach by many concrete examples and then generalize.
- Include counterexamples to clarify boundaries.
- Some argue the real difficulty is higher‑order functions, polymorphism, and typeclasses used together; monads themselves are then “easy.”
- Suggested resources include challenge-based learning and visual/intuitive introductions.
Usefulness, complexity, and category theory
- Debate over whether talking about monads as “monoids in the category of endofunctors” helps programmers.
- Some see category-theoretic language as powerful shared vocabulary; others see it as overkill and gatekeeping, preferring simpler “wrapper/pipeline” descriptions.
- Concerns that monads and especially monad transformers are practically cumbersome.
Functional programming’s status
- One view: functional programming “never really caught on” in critical large systems; OOP and Java dominate.
- Counterpoints:
- FP ideas (lambdas, higher-order functions, pattern matching, ADTs) are mainstream in many imperative languages.
- Rust, JavaScript, and frameworks like React embody functional patterns, even if not purely functional.
- Overall: FP is seen as influential, but pure FP and explicit monad use remain niche.