为什么运行unsafeRunSync()两次会破坏RT

zer*_*ing -2 scala scala-cats

我有以下应用程序,我无法弄明白,为什么运行它两次它打破RT:

val program = for {
  _ <- IO { println("Welcome to Scala!  What's your name?") }
  _ <- IO { println(s"Well hello, foo") }
} yield ()

program.unsafeRunSync()
program.unsafeRunSync()
Run Code Online (Sandbox Code Playgroud)

我运行了两次并得到了两次相同的结果,为什么它会破坏RT?

tpo*_*cat 6

这是因为val a = program.unsafeRunSync(); val b = program.unsafeRunSync()不是同一个程序val a = program.unsafeRunSync(); val b = a.如果表达式是RT,那么您可以内联它或将其自由计算出来.你不能在这里做到这一点.