Necesitaba algún tipo de estructura recursiva en algún fragmento de código usando rasgos y el tipo estructural como restricción de parámetro de tipo. Funcionó bien, pero luego supe que Scala no admite tipos estructurales recursivos.Observación divertida sobre tipos estructurales (recursivos) en Scala
Entonces alguien me puede explicar por qué esto funciona bien:
scala> trait Test[M[A] <: { def map[B](f: A => B) : M[B] } ] {}
defined trait Test
y esto no:
scala> def test[M[A] <: { def map[B](f: A => B) : M[B] } ] = null
<console>:5: error: illegal cyclic reference involving type M
def test[M[A] <: { def map[B](f: A => B) : M[B] } ] = null
en realidad me gusta la solución con alias de tipo y que incluso funciona para definiciones de funciones. Pero su primer ejemplo se comporta exactamente como el mío, diciendo que el Test-rasgo compila bien. Pero si funciona usando alias tipo, definitivamente debería funcionar sin usarlos también?!? – urso
Sí, creo que hay algunas inconsistencias aquí: debería funcionar con alias de tipo y sin o no debería funcionar en absoluto. Es por eso que creo que esto es un error en el compilador. – michid
¿Tiene un número de rastreador de errores? – soc