¿Es posible usar límites de contexto en alias de tipo en Scala?Usar contexto vinculado en alias de tipo
por ejemplo
type U = A : B
¿Es posible usar límites de contexto en alias de tipo en Scala?Usar contexto vinculado en alias de tipo
por ejemplo
type U = A : B
No, porque el contexto unido es en realidad una forma abreviada de un parámetro implícito adicional.
Por ejemplo:
def sort[A : Ordering](xs: Seq[A])
es una forma abreviada de
def sort[A](xs: Seq[A])(implicit ordering: Ordering[A])
y esto no se puede representar en una definición de tipo.
En lugar de tener un contexto vinculado directamente en la declaración de tipo, tendría que tener una declaración de valor por separado que represente el parámetro implícito mencionado por JPP.
El que define el tipo también tendrá que proporcionar la evidencia para el contexto unido:
trait Generic {
type U
implicit val ordering: Ordering[U] // evidence for U: Ordering
def max(u1: U, u2: U) = List(u1, u2).max
}
def concrete[T: Ordering] = new Generic {
type U = T
val ordering = implicitly[Ordering[T]]
}
assert(concrete[Int].max(1,3) == 3)
Esta debería ser la respuesta aceptada –
Gracias. Esto tiene sentido. –