функции можно вводить в том же смысле что и данные. Мы не данные выводим, мы их в строки сворачиваем и уже строку выводим. Мы не данные и вводим, мы вводим строки которые парсим, и распарсить мы можем и в функцию
@cblp_su я ещё тут вспомню про изоморфизм a и (forall r. a -> r) -> r и на этом посчитаю диалог законченным. Ввод/вывод вне модели чистого ФП, поэтому "с данными можно ввод/вывод" это какая-то императивщина.
А еще есть сериализация, в свое время джависты накололись на этом, так как можно было сериализовать класс который выполнял произвольный код на "той" стороне