вот IO == impl Future<Result<(), IOError>>
main IO == tokio::main
а рантайм хаскелля это реактор.
Из футуры ты никак не можешь продолжить выполнение или увидеть какую-то нечистоту. А раз не можешь увидеть, значит её и нет.
Нужно понимать, что хаскель и работает как ты предлагаешь - чистое ядро я "грязное" выполнение всех операций, только ты предлагаешь только часть чистых функций делать, а модель с ИО позволяет сделать чистой всю прогармму