Tak just for record (kdyby to tady náhodou taky četl ještě někdo jiný, koho by zajímalo to původní téma):
A to já si to počtu rád, je-li co.
Hlavní fígl monády oproti normálnímu řetězení normálních funkcí je, že se dají řetězit funkce, které přijímají parametr z "normálního světa" ("normálních hodnot"), ale vrací hodnotu "z jiného světa". Problém toho příkladu v PHP, u kterého Smutný příběh začal, je, že parametr i výsledná hodnota jsou "z normálního světa". To mě hnedka trklo a nezdálo se mi to. Ten příklad prostě podle mě nevystihuje to hlavní, o co v tom všem jde. Každá z těch zřetězených funkcí totiž musí "skákat nahoru", do toho jiného ("vyššího") světa, takže to zřetězení pak vlastně "skáče nahoru a dolů", přimž je zajímavé, že uvnitř jazyka jde skočit jenom nahoru. Skokem dolů se totiž realizuje ten "nečistý" efekt, který v jazyce jako takovém nechceme. Zajímavé a elegantní. Snadno pochopitelné na příkladě Promise z JS, který dělá přesně to samé.
Hezký.
Bezpečně chápu Promise a Maybe, hůř jsem na tom s IO. Takže to všechno prohodím, a budu uvažovat:
Mám funkci, která načte číslo ze souboru, pokud je sudé tak něco s tím spočte, pokud liché, něco jiného, a pak tu hodnotu zapíše zpět do souboru. A to celé třikrát, ať to pěkně vynikne.
Jsem v té funkci. Jeden kontext. Když chci načítat ze souboru, tak to nejde, protože soubor nepatří do mého "světa", nejde předat argumentem (tak čtení by snad na humpoláka šlo, ale zápis už ne). Takže nemůžu použít normální pure funkci. Uvožováním ala Promise to celé obrátím a řeknu: "hele, sežeň mi soubor já si z něho načtu hodnotu, něco spočtu, a pak do něj zase zapíšu." - toto je funkce f1. A to celé třikrát. Následně se celý tento recepis vezme, a nějaký interpret to přečte a musí sehnat ten soubor, a musí provést skutečné zápisy mezi funkcí f1, a f2 a f3.
A celé se to vymejšlí kůli tomu, aby se ověřilo, že: za předpokladu, že splníme všechny deklarované požadavky (načtení a zápis a synchronizaci souborů), bude to fungovat, protože to lze zaručit. Tedy oddělení zaručitelných (pure) a nezaručitelných věcí.
A jestli se alespoň trochu chytám, tak ten lift je ta část, kdy ta funkce předává roli tomu interpretu, tak? Nebo jinak?