首页 > 解决方案 > 在同一个实例上多次执行 IO::unsafeRunSync 是否合适?

问题描述

我有一个关于IOmonad 的问题。我打开了一些InputStream,想用IO它来阅读。这是示例:

def read(io: IO[Option[Array[Byte]]]): IO[Unit] = IO {
  io.unsafeRunSync() match {
    case Some(b) => 
         //do some with b
         read(io)
    case None => 
         ()
  }
}

我感到困惑的是,我从同一个IO实例中读取了多次修改它的状态。它看起来不像引用透明方法。这样做是常见的还是有更多的 FP 风格?

标签: scalafunctional-programmingscalazscala-cats

解决方案


推荐阅读