Когда ты вызваешь функцию, которая возвращает IO - то никаких эффектов не происходит, эта функция полностью чистая, ссылочно прозрачная и т.п. и т.д.
согласен, но когда это дойдет до рантайма, то уже пойдет "грязный" код работать
так вот, а что мешает тоже самое сделать не в ML языках?