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.