SO YOU WANNA LEARN MONADS?!?!

WHY? WHAT'S WRONG WITH YOU?!

Listen, friend. I've been in this industry for DECADES and let me tell you something...

OOP IS THE ONE TRUE WAY TO PROGRAM!

BACK IN MY DAY...

  • We didn't have your fancy "FUNCTIONAL PROGRAMMING"! We used GOTO statements and we were GRATEFUL!
  • IMMUTABILITY? HA! We MUTATED our variables 50 TIMES in a single function and NOBODY COMPLAINED!
  • We stored our STATE in GLOBAL VARIABLES and we LIKED IT THAT WAY! None of this "pure function" NONSENSE!
  • You needed a SINGLETON? You just made a GLOBAL VARIABLE with an ALL-CAPS NAME! No fancy DESIGN PATTERNS required!

KIDS TODAY HAVE IT TOO EASY!

  • You think TYPING CODE is HARD?? We had to PUNCH HOLES in CARDS and if you made ONE MISTAKE you had to START OVER!
  • Drop your stack of 2,000 punch cards? CONGRATULATIONS! Your weekend is RUINED and the program is now RANDOMLY SORTED!
  • Error messages that actually TELL YOU what's wrong?? LUXURY! We just got "CARD JAM IN READER" and had to GUESS!

Who needs these fancy "functional programming" concepts when you can have:

  • INHERITANCE HIERARCHIES 50 LEVELS DEEP!
  • GETTERS AND SETTERS FOR EVERYTHING!
  • DESIGN PATTERNS WITH NAMES LONGER THAN YOUR RESUME!

But nooooo, you want to learn about MONADS...

Fine. Here's what you need to know about monads:

A MONAD is basically a BURRITO that WRAPS your CODE in SADNESS and CONFUSION!

🥴
  +-------------+       MAGIC      +-------------+
  |    INPUT    | --------------> |   OUTPUT??   |
  |   CODE :)   |                 |   CODE :(    |
  +-------------+                 +-------------+
        |                               |
        |                               |
        | MONADS                        | MONADS
        |   DO                          |   DO
        v   THIS                        v   THIS
  +-------------+                 +-------------+
  |  COMPUTER   |                 | YOUR BRAIN  |
  |   WORKS     |                 |  EXPLODES   |
  +-------------+                 +-------------+
        

MONAD FACTS THEY DON'T WANT YOU TO KNOW!!!

  • Monads were invented by ALIENS to confuse JavaScript developers!
  • Using monads makes your computer run at 500% EFFICIENCY but only on TUESDAYS!
  • The "M" in "Monad" stands for "MAYONNAISE" because they make your code SMOOTH but WEIRD!
  • If you say "monad" three times in front of your mirror, a Haskell programmer appears to lecture you!
  • Monads are ILLEGAL in 49 states because they're TOO POWERFUL!

THE HASKELL AGENDA

These WOKE HASKELL PROGRAMMERS want to FORCE you to write PURE FUNCTIONS! What's next?? OUTLAWING SIDE EFFECTS?? This is AMERICA! I have the RIGHT to mutate my variables WHENEVER I WANT!

They sit in their IVORY TOWERS with their "LAZY EVALUATION" while REAL PROGRAMMERS are out here EAGERLY EVALUATING like our FOUNDING FATHERS intended!

GET OFF MY LAWN WITH YOUR MONADS!

In the REAL WORLD we use ABSTRACT FACTORY SINGLETON OBSERVER PATTERN MANAGER FACTORIES and we're PROUD OF IT!

HOW TO USE A MONAD (IN A REAL PROGRAMMER'S LANGUAGE):

       IDENTIFICATION DIVISION.
       PROGRAM-ID. MONAD-EXAMPLE.
       
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 THE-MONAD.
          05 VALUE-CONTAINER    PIC X(20).
          05 IS-NOTHING         PIC 9 VALUE 0.
       
       PROCEDURE DIVISION.
       
       MONAD-PROGRAM.
          DISPLAY "WELCOME TO ENTERPRISE MONAD SYSTEM V2.3"
          DISPLAY "COPYRIGHT 1983-1987"
          DISPLAY "-----------------------------------"
          
          PERFORM INITIALIZE-MONAD
          PERFORM MAP-OPERATION
          PERFORM FLAT-MAP-OPERATION
          PERFORM GET-VALUE
          
          STOP RUN.
          
       INITIALIZE-MONAD.
          MOVE "5" TO VALUE-CONTAINER
          MOVE 0 TO IS-NOTHING
          DISPLAY "MONAD INITIALIZED WITH VALUE 5".
          
       MAP-OPERATION.
          DISPLAY "PERFORMING MAP OPERATION..."
          IF IS-NOTHING = 0
             ADD 2 TO VALUE-CONTAINER
             MULTIPLY VALUE-CONTAINER BY FUNCTION RANDOM
             DISPLAY "MAPPED VALUE: " VALUE-CONTAINER
          ELSE
             DISPLAY "CANNOT MAP NOTHING MONAD!"
          END-IF.
          
       FLAT-MAP-OPERATION.
          DISPLAY "PERFORMING FLAT-MAP OPERATION..."
          IF IS-NOTHING = 0
             STRING "SURPRISE! " VALUE-CONTAINER 
                DELIMITED BY SIZE
                INTO VALUE-CONTAINER
             DISPLAY "FLAT-MAPPED VALUE: " VALUE-CONTAINER
          ELSE
             DISPLAY "CANNOT FLAT-MAP NOTHING MONAD!"
          END-IF.
          
       GET-VALUE.
          DISPLAY "RETRIEVING FINAL VALUE..."
          IF IS-NOTHING = 0
             DISPLAY "RESULT: " VALUE-CONTAINER
          ELSE
             DISPLAY "RESULT: MONAD BROKE EVERYTHING"
          END-IF.