Scala Cats累积错误或成功的Ior

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

我正在尝试使用Cats数据类型Ior来累积错误和使用服务的成功(可能会返回错误)。

def find(key: String): F[Ior[NonEmptyList[Error], A]] = {
  (for {
      b <- service.findByKey(key)
    } yield b.rightIor[NonEmptyList[Error]])
  .recover {
      case e: Error => Ior.leftNel(AnotherError)
    }
}

def findMultiple(keys: List[String]): F[Ior[NonEmptyList[Error], List[A]]] = {
  keys map find reduce (_ |+| _)
}

我的困惑在于如何合并错误/成功。我正在尝试使用Semigroup组合(中缀语法)进行组合,但没有成功。有一个更好的方法吗?任何帮助都会很棒。

scala scala-cats
1个回答
0
投票

对于此特定示例,它实际上取决于F是什么。您可能需要为您的方法提供隐式输入。它以最丑陋的形式出现,如下所示:

def findMultiple[F[_], A](keys: List[String])(implicit SF:Semigroup[F[Ior[NonEmptyList[Error],A]]]): F[Ior[NonEmptyList[Error], A]] = ???
© www.soinside.com 2019 - 2024. All rights reserved.