Když můžu v Haskellu napsat kód, který vypadá a chová se úplně stejně jako kód napsaný v Cčku, tak Haskell prostě není pure.
No, to je dost zvláštní tvrzení. Představ si, že bys měl main funkci, která by vracela "seznam IO akcí" - načti tohle, vraž to sem, zapiš tohle tam. Výsledkem main funkce by byl jenom tenhle seznam. což je statická abstraktní struktura, kterou jistě můžeš generovat čistě.
...no a tuhle strukturu prostě vezmeš a
v runtimu uděláš ty akce. Co je na tom teda nečistého a podle jaké definice?
No a tohle je v podstatě přesně to, co IO monáda dělá.