我正在尝试将 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 来完成上述操作?
到目前为止我尝试过的是
Resource
的元组可以连续或并行地组合而成
import cats.syntax._
(rA, rB).tupled // Resource[F, (A, B)], serial acquire
(rA, rB).parTupled // Resource[F, (A, B)], parallel acquire
与
mapN
或 parMapN
类似,可以直接应用函数,而不仅仅是从资源中获取元组值