我正在学习scalaz,现在我试图理解IO
单子的意义。我阅读了关于IO单子的这篇文章,并试图运行最简单的示例:
val io = println("test").pure[IO]
println("before")
io.unsafePerformIO()
是的,它按预期工作。它会打印
before
test
但是我无法理解IO单子的要点。有什么诀窍吗?除了我参考的文章中指定的“维护替换”之外。
现在看来,替换似乎不太有用。你能解释一下吗?
从我所想象的来看,假设我有一些特性:
trait Reader{
def read(): List[Int]
}
trait Writer[T]{
def write(t: T): Unit
}
我有一个读取器,可以读取单子值(在我的情况下是 List
)。然后我需要将容器中的所有值写入到其他地方,并对它们执行一些转换。在这种情况下,IO 单子是否有用?
IO[List[T]]
的问题。Scalaz
是否有适用于IO
单子的转换器?使用IoT[T]
将非常方便。 - St.AntarioIO[List[T]]
,那么你需要一个ListT
转换器,而 scalaz 已经提供了这个功能。 - Yuval Itzchakov