Я читал Пастушьи кошки
Последний пример на странице обхода списка секвенирования Either для меня не удался.
в примере они делают это: -
scala> List(Right(1): Either[String, Int]).sequence
res5: Either[String,List[Int]] = Right(List(1))
scala> List(Right(1): Either[String, Int], Left("boom"): Either[String, Int]).sequence
res6: Either[String,List[Int]] = Left(boom)
Но когда я пытаюсь, я получаю следующую ошибку: -
scala> import cats._, cats.data._, cats.implicits._
scala> val les = List(Right(3):Either[String,Int], Right(2):Either[String,Int])
scala> les.sequence
<console>:37: error: Cannot prove that Either[String,Int] <:< G[A].
les.sequence
^
Но когда я помогаю компилятору псевдонимом типа, чтобы исправить левый тип, все в порядке: -
scala> type XorStr[X] = Either[String,X]
defined type alias XorStr
scala> val les = List(Right(3):XorStr[Int], Right(2):XorStr[Int])
les: List[XorStr[Int]] = List(Right(3), Right(2))
scala> les.sequence
res0: XorStr[List[Int]] = Right(List(3, 2))
Итак, мой вопрос: как мне заставить вывод типа делать правильные вещи, чтобы пример работал, без необходимости вводить псевдоним типа?
Пропустил ли я важный неявный импорт для работы с Either [A, B]?
Спасибо Карл