Avevo bisogno di un tipo strutturale ricorsivo in qualche parte di codice usando i tratti e il tipo strutturale come vincolo del parametro di tipo. Ha funzionato bene, ma in seguito ho imparato che Scala non supporta i tipi strutturali ricorsivi.Divertente osservazione sui tipi strutturali (ricorsivi) in Scala
Così Qualcuno mi può spiegare perché questo funziona bene:
scala> trait Test[M[A] <: { def map[B](f: A => B) : M[B] } ] {}
defined trait Test
e questo non:
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
in realtà mi piace la soluzione utilizzando alias di tipo e che funziona anche per le definizioni di funzione. Ma il tuo primo esempio si comporta esattamente come il mio, dicendo che il Test-tratto si compila bene. Ma se funziona usando i pseudonimi, sicuramente dovrebbe funzionare anche senza usarli?!? – urso
Sì, penso che ci sia qualche incongruenza qui: dovrebbe funzionare con alias di tipo e senza o non dovrebbe funzionare affatto. Ecco perché penso che questo sia un problema tecnico nel compilatore. – michid
Hai un numero di inseguitore di bug? – soc