合并嵌套析取结果类型的左侧

Combine left sides from nested disjunction result type

如果我有一个类型 \/[Errs, \/[Errs, Boolean]] 并且想要组合两个左(两个 Errs),那么最好的方法是什么 \/[Errs,Boolean] 新的 Errs 将是从早期类型的两个 lefts 中附加两个 ErrsErrs 只不过是 case class

case class Errs(errors: List[Err])

Err

 case class Err(exceptionMessage: String, customMessage: String, statusCode: Int, extraInfo: Option[String] = None)

我正在尝试将 type1 = \/[Errs, \/[Errs,Boolean]] 转换为 type2 = \/[Errs,Boolean],其中 type2 中的 Errs 应该是 "merged" Errs(不会丢失任何 left 来自两个析取组合的信息。

为了完整起见:因为这是一个析取,您永远不必担心 "merging" 错误——整个事情要么是左侧的 Errs,要么是右边有一个 Errs 在左边。两者不能同时存在。

如果要折叠两个级别,t1.flatMap(identity) 会将 Errs \/ (Errs \/ Boolean) 变成普通的旧 Errs \/ Boolean