Mik*_*ike 3 scala scala-cats cats-effect
我正在与猫打交道,我想将其转换val x: State[A, B]为猫StateT[IO, A, B]。注意:IO来自猫的效果。
如何优雅地做到这一点?
mapK结合尝试cats.arrow.FunctionK.lift:
x.mapK(lift(IO.eval))
Run Code Online (Sandbox Code Playgroud)
完整的可编译代码段:
import cats.effect.IO
import cats.data.{State, StateT}
import cats.arrow.FunctionK.lift
object InjectIdIO {
def i[S, V](x: State[S, V]): StateT[IO, S, V] = x.mapK(lift(IO.eval))
}
Run Code Online (Sandbox Code Playgroud)
这工作,因为State[S, A]确实是StateT[Eval, S, A],你要替换Eval的IO-这是什么mapK通常是。
另一种选择是kind-projector:
x.mapK(Lambda[Eval ~> IO](IO.eval(_)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |