To není pohádka, to tak je
Jenže bez vysvětlení podstaty je to zavádějící. Student by se automaticky zeptal "Aha, takže tenhle blok překládá překladač jinak než zbytek programu?", "A proč teda není takový celý program? Bylo by to pak jak v Pascalu a tímpádem mnohem jednodušší", popřípadě ještě hůř: "aha, takže vy nám tady celou dobu vykládáte, jak jsou lazy pure funkce super a teď s nima nejde ani blbej printf?!"
Ale jo, s dávkou didaktického talentu by se to asi vysvětlit dalo - popsalo by se prostě IO + ty operace z Monad + to, že do je jenom syntaktický cukr, akorát by se zamlčelo, že ty operace tvoří tu Monad a že se dají použít i jinde.
...akorát mi to přijde takový... no typicky akademický - prvně se vymyslí skvělý ohýbák ("Pojďme učit Haskell!") a pak se musí složitě vymýšlet narovnávák, aby to vůbec v praktické výuce dávalo smysl