读者作家状态monad – 如何运行这个scala代码
发布时间:2020-12-16 09:32:23 所属栏目:安全 来源:网络整理
导读:托尼·莫里斯(Tony Morris)与这个 snippet发表了讲话。 他使用ReaderWriterState monad来提供对隐式上下文的受控读/写访问。这就说得通了。 如何使用代码?我想看一个使用这个monad的例子“main”程序。 解决方法 Scalaz 7现在提供这个monad,以下是一个完整
|
托尼·莫里斯(Tony Morris)与这个
snippet发表了讲话。
他使用ReaderWriterState monad来提供对隐式上下文的受控读/写访问。这就说得通了。 如何使用代码?我想看一个使用这个monad的例子“main”程序。 解决方法
Scalaz 7现在提供这个monad,以下是一个完整的工作示例,翻译与
the example by Michael Pilquist中的小修订,在上面的评论中链接。
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[Identity]
}
def invokeService: ReaderWriterState[Config,Int,Int] =
ReaderWriterStateT {
case (cfg,invocationCount) => (
List("Invoking service with port " + cfg.port),scala.util.Random.nextInt(100),invocationCount + 1
).point[Identity]
}
val program: RWS[Config,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 Need(logMessages,result,invocationCount) = program run (Config(443),0)
println("Result: " + result)
println("Service invocations: " + invocationCount)
println("Log: %n%s".format(logMessages.mkString("t","%nt".format(),"")))
}
这是针对Scalaz 7.0.0-M3测试的,它是从Maven的中央存储库中的easily available作为Maven或SBT依赖关系。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
