В целях обучения я пытаюсь определить класс-оболочку с именем DoubleMap
, который предоставляет метод mapBoth
. По сути, он принимает две функции f
и g
, где домен g
является совмещенным доменом f
. Состав этой функции ( gof ) должен быть затем сопоставлен с контейнером, завернутым в DoubleMap
Это мой текущий код:
implicit class DoubleMap
[A, B, C, F[X] <: List[X]] // just List for now
(xs: F[A])(implicit cbf: CanBuildFrom[F[A], C, F[C]]) {
def mapBoth(f: A => B)(g: B => C): F[C] =
xs.map(f andThen g).to[F]
}
Однако, когдаЯ хочу использовать метод, подобный следующему:
List(true, false, false).mapBoth(!_)(!_)
Я получаю зашифрованное сообщение об ошибке о несоответствии типов между (найденным) типом CanBuildFrom[List[_], Nothing, List[Nothing]]
и (обязательным) типом CanBuildFrom[List[Boolean], C, List[C]]
Почему компилятор выводит первый тип?