in core/src/main/scala/com/spotify/featran/CollectionType.scala [43:75]
implicit def scalaCollectionType[M[_] <: Iterable[_]](implicit
cb: CanBuild[_, M]
): CollectionType[M] =
new CollectionType[M] {
override def map[A, B: ClassTag](ma: M[A])(f: A => B): M[B] = {
val builder = cb().asInstanceOf[mutable.Builder[B, M[B]]]
ma.asInstanceOf[Iterable[A]].foreach(a => builder += f(a))
builder.result()
}
override def pure[A, B: ClassTag](ma: M[A])(b: B): M[B] = {
val builder = cb().asInstanceOf[mutable.Builder[B, M[B]]]
builder += b
builder.result()
}
override def reduce[A](ma: M[A])(f: (A, A) => A): M[A] = {
val builder = cb().asInstanceOf[mutable.Builder[A, M[A]]]
if (ma.nonEmpty) {
builder += ma.asInstanceOf[Iterable[A]].reduce(f)
}
builder.result()
}
override def cross[A, B: ClassTag](ma: M[A])(mb: M[B]): M[(A, B)] = {
val builder = cb().asInstanceOf[mutable.Builder[(A, B), M[(A, B)]]]
if (mb.nonEmpty) {
val b = mb.asInstanceOf[Iterable[B]].head
ma.asInstanceOf[Iterable[A]].foreach(a => builder += ((a, b)))
}
builder.result()
}
}