有没有办法将资源元组转换为元组资源?

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

我正在尝试将 Scala2/无形代码移植到 Scala3,我错过的一件事是将资源的 HList 转换为单个类型安全的资源。

在Scala2中,我可以使用cats.sequence.Traverser的遍历

type T = A :: B :: HNil

val resourceH: Resource[F, T] = (resourceA :: resourceB :: HNil).traverse(...)

然而,cats 移除了 Traverser,Shapeless-3 移除了

HList
,并提到官方的替代品只是使用 Tuple。有没有办法使用简单的、任意的元组而不是 HList 来完成上述操作?

到目前为止我尝试过的是

  • (类型不安全)资源元组乘积的迭代。我不仅背叛了编译器,它在运行时也无法转换回正确的元组类型
  • 尝试通过递归构建元组资源。但我似乎无法正确理解语法
scala-cats scala-3 cats-effect
1个回答
0
投票

Resource
的元组可以连续或并行地组合而成

import cats.syntax._
(rA, rB).tupled    // Resource[F, (A, B)], serial acquire
(rA, rB).parTupled // Resource[F, (A, B)], parallel acquire

mapN
parMapN
类似,可以直接应用函数,而不仅仅是从资源中获取元组值

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