Образованное предположение:
def toSet[B :> A]: Set[B]
против
def toList: List[A]
По какой-то причине toSet
является параметрическим - если вы разделите toSet
и map
на два утверждения, тов первом случае компилятор должен будет что-то предположить и присвоить этот тип val
, затем использовать B
, предположительно равный A
в map
.
Но с Seq(1,2,3).toSet.map
он предполагает, чтоэто какой-то B >: Int
, который он должен затем отобразить в ... что именно?Вы можете угадать тип _ * 2
, только если знаете тип _
.
Короче говоря, проблема в [B :> A]
, так как если мы сделаем это:
implicit class AsSetOps[F, A](val fa: scala.collection.SeqLike[A, F]) {
def asSet: Set[A] = fa.toSet[A]
}
Seq(1,2,3).asSet.map(_ * 2)
это работает.
Я могу только догадываться, что это была какая-то попытка сделать toSet
ковариант, который дал обратный эффект.