带ZIO的功能性Hang子手

Scalaz-ZIO在Scala社区引起了很多炒作。 我通过复制约翰·德·高斯(John De Goes)的演讲中的猜谜游戏“ Hangman”的实现进行了检验。 它基本上是相同的代码,但具有一些小的游戏增强功能,重要的是它已更新为新的ZIO。 玩和编写代码很有趣。

这是游戏的主要功能,您可以通过调用来运行该功能

hangmanGame与John的演讲几乎没有什么不同,只是它已更新为ZIO而不是IO。 它还使用来自zio的Random选择随机单词。 听起来有些奇怪,但我同时使用scala.util.Random和zio.random.Random和zio版本对游戏进行了很多测试,效果似乎更好。 大多数游戏逻辑都在gameLoop函数中:

与John的版本相比,有一些细微变化,当然包括新的类型签名,以及ZIO.succeed(而不是IO.now)的使用。 我添加的一点改进是告诉玩家输了时正确的答案。 总体而言,学习ZIO是一个很好的练习,并且从IO到ZIO的迁移非常轻松,而且编译器错误将我引向正确的类型签名。

该代码在我的github上可用:

https://github.com/spf3000/functional-hangman