 Such potentially infinite data structures are used for applications such as I/O.Using codata entails the usage of such operations as corecursion.However, it is possible to do I/O in a total functional programming language (with dependent types) also without codata.