gpt4 book ai didi

scala - 读者作者状态monad-如何运行此scala代码

转载 作者:行者123 更新时间:2023-12-03 13:31:53 24 4
gpt4 key购买 nike

托尼·莫里斯(Tony Morris)对此snippet进行了演讲。

他正在使用ReaderWriterState monad来提供对隐式上下文的受控读/写访问。这就说得通了。

如何使用代码?我想看一个使用此monad的示例“ main”程序。

最佳答案

Scalaz 7现在提供了此monad,下面是一个完整的工作示例,该示例经过翻译而成,并附带了以上注释中链接的the example by Michael Pilquist的较小修订。

package scalaz.example

import scalaz._, Scalaz._


object RWSExample extends App {
case class Config(port: Int)

def log[R, S](msg: String): ReaderWriterState[R, List[String], S, Unit] =
ReaderWriterStateT {
case (r, s) => (msg.format(r, s) :: Nil, (), s).point[Id]
}

def invokeService: ReaderWriterState[Config, List[String], Int, Int] =
ReaderWriterStateT {
case (cfg, invocationCount) => (
List("Invoking service with port " + cfg.port),
scala.util.Random.nextInt(100),
invocationCount + 1).point[Id]
}

val program: RWS[Config, List[String], Int, Int] = for {
_ <- log("Start - r: %s, s: %s")
res <- invokeService
_ <- log("Between - r: %s, s: %s")
_ <- invokeService
_ <- log("Done - r: %s, s: %s")
} yield res

val (logMessages, result, invocationCount) = program run (Config(443), 0)
println("Result: " + result)
println("Service invocations: " + invocationCount)
println("Log: %n%s".format(logMessages.mkString("\t", "%n\t".format(), "")))
}


已针对Scalaz 7.2.18(来自Maven中央存储库中的 easily available作为Maven或SBT依赖项)进行了测试。

关于scala - 读者作者状态monad-如何运行此scala代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11619433/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com