Ale tohle všichni vědí, to je přece jasné. Pointa je, že to uživatele vůbec nezajímá. On chce, aby program něco dělal, pro něj musí mít chování. Takže sice můžeš říct, že "polovina Haskell programu" jenom vyprodukuje, co se má udělat, ale reálně k tomu potřebuješ i tu "druhou polovinu", která to opravdu vykoná. Ty uvažuješ jenom o té první půlce, jenomže ta ti je bez té druhé úplně k ničemu. Taková hezká akademická úvaha, co se nám nehodí, to odsuneme jinam a nebudeme se tím zabývat. Reálně to v tom programu ale je. Musí být. Bez toho by nefungoval.
Úplně stejná analogie je s undefined behavior ve StablePtr. Uživatele vůbec nezajímá, že je to IO monáda a že to podle tebe nepatří do Haskell programu. Uživatele ale sakra bude zajímat, když to použiješ blbě a program mu spadne. Můžeš mu zkusit vysvětlit, že vlastně nespadl Haskell program, ale něco úplně jiného, co ty už neřešíš. Obávám se ale, že tě požene svinským krokem.