Mohu-li ve vší skromnosti radit, ignorujte jeho ovčáčkovský styl (=směs urážek, pseudoironie a demagogie), třeba ho to pak přestane bavit.
Není sebemenší problém dokázat, že jsem cokoli řekl špatně. Rád to uznám, když dostanu jasný nezvratný argument.
Takže pro jistotu si to shrňme:
Nejtypičtější použití monády (o kterém tady byla řeč), je vytvoření nějakého "předpisu výpočtu" - něčeho, co sestává z nějakých kroků, je jednoznačně dané jejich pořadí, dá se kontrolovat typová korektnost (typ výstupu = typ vstupu), to celé je deklarativní (spouští se to "někde jinde" nebo třeba "se spožděním" - jako ten Promise) a ještě ke všemu to funguje i v jazyce, který negarantuje pořadí vyčíslování funkcí.
No a k tomu zřetězování se používá něco, co se jmenuje "bind" a vypadá to takhle:
(>>=)  :: m a -> (  a -> m b) -> m b
- čili to bere monadické X, funkci z normálních hodnot do monádického Y a vrací to monadické Y
Položme si tedy zásadní otázku, co vlastně dělá ten druhý parametr typu (a -> m b)? Proč tam je? No, dejme třeba bindu Promise<Int> a funkci, která z integeru dělá Promise<string>, co mi z toho ten bind udělá? No světe div se, zřetězí mi ty dva promisy do jednoho, který mi hned vrátí. Takže až mi ze sítě přijde ten integer, zavolá se callback, který ten integer vezme jako index záznamu na disku, odkud načte string. Což ale taky chvíli trvá, takže to taky musí být Promise. A tyhle dvě věci dohromady jsou Promise<string>.
To je celá věda nejtypičtějšího použití monády na příkladu z Javascriptu. Není na tom vůbec nic nepochopitelnýho průměrně inteligentnímu programátorovi.
A to, že ten callback dělá z integeru PROMISE string je tam podstatný, což je celý, o co tady šlo...
Pro zajímavost si tedy shrňme: demagogie je, když řekneme, že callback (a -> m b) "liftuje". To je úplně špatně, může to říct jenom demagog nebo pitomec, co si to musí dostudovat.
Správně je, když řekneme, že return (return ::   a  -> m a) "liftuje". Na tom je vidět, že tomu rozumíme.