Protoze vykonava nejakou cinnost.
Protože nic nezaručuje? (Pure funkce je schopná zaručit, že nebudou porušeny principy FP, zatímco IOMonáda toto zaručit nemůže.)
Teď ti nerozumím. Nebo nevím, čemu říkáš "pure funkce". Pokud pod "pure funkce" myslíš "matematická funkce", tak ta opravdu podle mě nemůže vykonávat žádnou činnost. Jak už jsem říkal, matematická funkce je
relace.
Např. můžeš mít funkci {{1,2},{2,3},{3,4},{4,5},...} - tahle funkce NEpřičítá jedničku. Jenom říká, že symboly "1" a "2" jsou v relaci "přičtení jedničky" (chceme-li "relace následník").
K tomu, aby byla vykonávána nějaká činnost, musí existovat nějaký
stroj, "výkonný mechanismus" apod., který něco od někud načte, něco někam zapíše apod. Jasně, může to dělat podle nějakého popisu, postupu, klidně i té relace, ale potřebuje mít k tomu popisu nějakou
sémantiku, nějak ten popis
interpretovat.
...takže třeba ta otázka, jestli tenhle celý cirkus "umožňuje souběhy" je podle mýho (možná špatnýho) dojmu otázka po vlastnostech toho "stroje", ne toho statického popisu ("relace").
Jak jsem už psal, na Prologu je to vidět imho líp - představ si, že bys měl nějaký čistě deklarativní logický jazyk ve stylu Prologu a dva různé inferenční enginy ("runtimy"), které by oba šly směrem k řešení jinou cestou - "funkce" v programu by pak byly stejné, ale
běh programu by byl v těch dvou případech jiný. Tohle je u deklarativních jazyků v principu možný. Samozřejmě je to nežádoucí, takže se jazyk vymyslí tak, aby měl sémantiku jednoznačnou - což je podobný jako princip té monády, která je takový trik, který ti umožňuje zafixovat něco, co by jinak zafixované nebylo.
(Nevylučuju, že jsem ti jenom špatně rozuměl, nebo se v něčem mýlím. Za doplnění/upřesnění budu rád.)