Чего чего?
"функция может читать ввод посредством некой другой функции" ?
О чём вообще речь. IO в программе вообще не происходит. Тут же просто сложение.
Скажите, пожалуйста, по какому принципу вы относите эту функцию abcd к нечистым?
Я могу добавить больше ограничений: никакая другая функция не обращается к переменной counter. Ни пишет, ни читает.
Что? abcd это чистая функция в таком случае?