Scala tipo de paréntesis

Lo sétrait Foo[T] significaT es un tipo parametrizado. Pero algunas veces puedo vertrait Foo[T1,T2] otrait Foo[T1,T2,R], No puedo encontrar en ninguna parte describir el significado de varios tipos dentro de un paréntesis de tipo, ¿podría indicarme los usos en este caso? Por lo que especulo, Foo [T1, T2] solo significa que definió dos parámetros de tipo, no tiene que ser tomado unT1 y devolver unT2.

Cuando leo playframework documentación hoy, nuevamente me encontré confundido acerca de esta pregunta. En la documentación, dice:

A BodyParser [A] es básicamente un Iteratee [Array [Byte], A], lo que significa que recibe fragmentos de bytes (siempre que el navegador web cargue algunos datos) y calcula un valor de tipo A como resultado.

Esta explicación suena como, el segundo parámetro de tipo dentro de un paréntesis de tipo es un tipo de retorno.

También recuerdo quetrait Function2 [-T1, -T2, +R] extends AnyRef significa una función que toma unT1 yT2, devuelve unR.

¿Por qué ponen el tipo de retorno en el soporte? ¿Significa que todo el último parámetro en un paréntesis es un tipo de retorno? ¿O acaban de definir un nuevo tipo R para el tipo de retorno?

Respuestas a la pregunta(4)

Su respuesta a la pregunta