Souhlas. A teď jen nechápu, proč je teda laziness v haskellu problém...
Není to problém. Je to omezení, které způsobuje, že jednoduché věci musíš pak dělat složitě (pomocí té IO monády). Prostě je to trade off - je to krásná vlastnost, ale něco stojí (a stojí hodně). Proto většina FP jazyků jde opačnou cestou - jsou "nečisté", ale díky tomu snadněji použitelné.
Tobě "do" syntaxe připadá složitá? Jediný, co potřebuješ pochopit, je rozdíl mezi pure a non-pure funkcí. A pak se s tím programuje úplně stejně jako v jiném jazyce.
Jinak z praxy - naprosto běžně se mi stává, že něco napíšu v IO, pak tam dodám State, sem tam i nějaký Reader, občas to pak celý přesunu do úplně jiného monadu. Takhle je to docela pohodlné, představ, že bych zrovna IO měl nějak jinak mě dost děsí...