读者作家状态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依赖关系。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |