/ / Typ Klasa z wieloma parametrami typu - scala, typeclass

Wpisz Class z wieloma parametrami typu - scala, typeclass

Mam funkcję z kilkoma parametrami typu. Jak powiedzieć kompilatorowi, że te typy są rzeczywiście w klasie typu?

trait Sizeable[-T, +R] {
def mySize(x: T): R
}

implicit object StringSize extends Sizeable[String, Int] {
def mySize(s: String) = s.length
}

def sum[T, R: Sizeable[T, R]](xs: List[T]): R =  xs.map(x => x.mySize)

Błąd to:

Error:(9, 14) A$A40.this.Sizeable[T,R] does not take type parameters
def sum[T, R: Sizeable[T, R]](xs: List[T]): R =  xs.map(x => x.mySize);}

Odpowiedzi:

2 dla odpowiedzi № 1

Możesz „nie używać kontekstu związanego w tym przypadku. Musisz jawnie wpisać niejawny parametr:

def foo[T, R](xs: List[T])(implicit sizeable: Sizeable[T,R]): List[R] =
xs.map(x => sizeable.mySize(x))