asumir el rasgo siguiente:¿Es posible usar evidencia implícita para forzar la compatibilidad de tipo estático entre tipos abstractos?
trait A {
type B
def +(a:A):A
}
utilizo un tipo abstracto porque no quiero arrastrar alrededor de la B en el tipo de firma cada vez que necesito una A. ¿Es todavía posible añadir ninguna evidencia implícita (utilizando =: =, <: <, etc.) con el método + para que el compilador pueda exigir la aceptación de: A con B idénticas.
Mi primer instinto es decir que no, pero Scala me ha sorprendido gratamente antes. Cualquier ayuda sería apreciada.
No puedo creer que el compilador no se queja de un ciclo! –
¿El refinamiento estructural también depende de las reflexiones en el tiempo de ejecución? – user44242
La reflexión en tiempo de ejecución solo se aplica cuando un refinamiento proporciona una nueva definición no de tipo que no está presente en su supertipo nominal (ver SLS 3.2.7). Eso no está sucediendo aquí, así que no, no hay reflexión en tiempo de ejecución involucrada. Puede verificar eso usando javap. –