Ahora que ya sabemos que la programación funcional trata de programar con funciones puras, y que las funciones puras no pueden producir efectos colaterales, surgen varias preguntas lógicas:
La respuesta a estas preguntas es la siguiente: Sí, podemos usar programación funcional en aplicaciones reales, y no solamente en ámbitos académicos. Para que nuestras aplicaciones sean capaces de interactuar con servicios externos, podemos hacer lo siguiente: en vez de escribir funciones que interactúan con el mundo exterior, escribimos funciones que describan interacciones con el mundo exterior, las cuales sean ejecutadas solamente en un punto específico de nuestra aplicación (llamado habitualmente como el fin del mundo) por ejemplo la función main.
Si lo pensamos detenidamente, estas descripciones de interacciones con el mundo exterior son simplemente valores inmutables que pueden servir como entradas y salidas de funciones puras, y de esta forma no estaríamos violando un principio básico de la programación funcional: no producir efectos colaterales.
¿Y qué es el antes mencionado fin del mundo? Bueno, el fin del mundo es simplemente un punto específico en nuestra aplicación donde el mundo funcional termina, y donde las descripciones de interacciones con el mundo exterior se ejecutan, usualmente tan tarde como sea posible, preferiblemente en el borde mismo de nuestra aplicación que es la función main. De esta forma, logramos que toda nuestra aplicación esté escrita siguiendo el estilo funcional, pero que al mismo tiempo sea capaz de realizar tareas útiles.
Ahora que sabemos todo esto surge una nueva pregunta: ¿cómo podemos escribir nuestras aplicaciones de tal manera que todas nuestras funciones no ejecuten efectos colaterales, sino que solamente construyan descripciones de lo que se quiere hacer? Y aquí es donde entra una librería muy poderosa, una que nos puede ayudar con esta tarea: Presentamos la librería ZIO.