如何在不使用A的情况下将效果附加到资源[F,A]中的F?

问题描述 投票:1回答:1

鉴于Resource[F, A],在不使用F(即A)的情况下,将效果(例如度量,记录错误)附加到.use的最惯用的方法是什么?

我可以使用F[A]轻松做到这一点,但我依赖于一个专门返回Resource[F, A]的API,以确保正确释放A

scala scala-cats cats-effect
1个回答
3
投票

如果我正确理解了这个问题,我会使用Resource.liftF<*。例如:

import cats.effect.{ IO, Resource }
import cats.syntax.apply._
import scala.io.Source

val src = Resource.fromAutoCloseable(IO(Source.fromFile("build.sbt")))
val log = IO(println("opening file"))

val loggedSrc = src <* Resource.liftF(log)

接着:

scala> val program = loggedSrc.use(s => IO(println(s.mkString)))
program: cats.effect.IO[Unit] = IO$201584418

scala> program.unsafeRunSync
opening file
scalaVersion := "2.12.8"

scalacOptions += "-Ypartial-unification"

libraryDependencies += "org.typelevel" %% "cats-effect" % "1.2.0"

一般来说,你有与F相同的方法,但是用Resource[F, _]提升到Resource.liftF

© www.soinside.com 2019 - 2024. All rights reserved.