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...
KIDS TODAY HAVE IT TOO EASY!
Who needs these fancy "functional programming" concepts when you can have:
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 |
+-------------+ +-------------+
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.