Super, uz se blizime k pointe!
Když sčítám dvě celá čísla, tak ta grupa tam implicitně je, jen o ní nemusím mluvit (a třeba ani vědět). Ale když to vím, nepřekvapí mě, že úplně stejný objekt - grupa - se používá třeba v kvantových výpočtech (jen nad jinou množinou, ať mě zase nechytáš za slovo). Prostě abstrakce je mnohdy užitečná (když zjistím, že dva na první pohled nesouvisející objekty jsou grupa, můžu s nimi najednou pracovat stejně, podobně jako když dva různé objekty jsou monáda, tak na ně můžu použít stejný (generický) algoritmus). Jediná otázka je, jak hluboko chce člověk v té abstrakci jít.
Když provadim retezeni IO operaci, tak ta monada tam implicitně je, jen o ní nemusím mluvit (a třeba ani vědět).
Ale když to vím, nepřekvapí mě, že úplně stejný objekt - monada - se používá třeba v retezeni listu (jen nad jinou množinou, ať mě zase nechytáš za slovo). Prostě abstrakce je mnohdy užitečná (když zjistím, že dva na první pohled nesouvisející objekty jsou monada, můžu s nimi najednou pracovat stejně, [...], tak na ně můžu použít stejný (generický) algoritmus). Jediná otázka je, jak hluboko chce člověk v té abstrakci jít.
...a tramtadada! Pointa je....
K tomu, abych nekomu vysvetlil, jak se v Haskellu dela IO, nepotrebuju slovo "Monada" vubec pouzit. Ani ho nebudu nijak opisovat. Proste mu ukazu par operaci, kde jedna vytvari IO akci "nacti", jina provadi retezeni IO akci a dalsi vytvari IO akci "vypis".
Ergo... K tomu, abych v Haskellu programoval, nutne pojem Monada vubec nemusim znat, stejne jako ho nemusim znat, kdyz v Javascriptu pouzivam promisy nebo listy (oboje to "jsou monady"*). A uz vubec nepotrebuju znat pojmy funktor, prirozena transformace a bla bla bla.
* ne zboji, sorry, formalne presne to fakt vypisovat nebudu