функция - это функция. Как она представляется или не представляется - это детали. На graph reduction machine от функции к моменту выполнения может ничего не остаться.
Блин, ты что не понимаешь что IO это аналог просто массива с колбеками. Ну или в C# например вот так. Thread Create() => new Thread(()=>Console.WriteLine(“Foo”)); Thread.Start(); Если не вызвать Start то ничего не выведется на консоль. Метод Create чистый. Он просто создаёт Thread (IO). Хоть 100 раз можно вызвать Create и по не вызовешь Start ничего не будет написано в консоли.