Ahora que ya hemos definido el modelo de dominio de nuestra aplicación, podemos comenzar con la implementación en el archivo com/example/Hangman.scala. Dentro de este archivo crearemos un objeto que implemente el trait zio.App, de esta manera:
import zio._
object Hangman extends App {
def run(args: List[String]): ZIO[ZEnv, Nothing, ExitCode] = ???
}
Con sólo este pequeño pedazo de código podemos aprender varias cosas:
- Para trabajar con ZIO, sólo necesitamos incluir import zio._, lo cual nos proporcionará, entre otras cosas, acceso al tipo de datos ZIO.
- Toda aplicación ZIO debe implementar el trait zio.App, en vez del trait App de la librería estándar.
- El trait zio.App requiere que implementemos un método run, que es el punto de entrada de la aplicación, como podemos ver este método recibe una lista de argumentos como cualquier aplicación normal de Scala, y retorna un efecto funcional ZIO, que ya sabemos que solamente es una descripción de lo que nuestra aplicación debe hacer. Dicha descripción será traducida por el entorno de ejecución de ZIO, al momento de ejecutar la aplicación, en verdaderas interacciones con el mundo exterior, es decir efectos colaterales (lo interesante de esto es que nosotros como desarrolladores no necesitamos preocuparnos de cómo esto ocurre, ZIO se encarga de todo eso por nosotros). Por tanto, el método run sería el fin del mundo funcional para nuestra aplicación, y lo dejaremos sin implementar por el momento.