Scala 2.11.5 falha do compilador com aliases e manifestos de tipo
Parece que passar um alias para um tipo parametrizado de caractere curinga para uma função que tenta obter um resultado implícitoManifest
para o tipo travará o compilador Scala 2.11.5.
O seguinte pode ser colado no 2.11.5 REPL para reproduzir a falha:
class C[T]
def f[T](implicit m: Manifest[T]) = 0
type CAlias = C[_]
val x = f[CAlias]
A saída do travamento é muito detalhada, mas contém esta informação:
scala.reflect.internal.FatalError:
?MethodType?
while compiling: <console>
during phase: globalPhase=erasure, enteringPhase=posterasure
library version: version 2.11.5
compiler version: version 2.11.5
reconstructed args:
last tree to typer: type $iw
tree position: line 9 of <console>
tree tpe: <notype>
symbol: object $iw
symbol definition: class $iw extends Object (a ModuleClassSymbol)
symbol package: $line10
symbol owners: object $iw -> object $iw -> object $read
call site: object $iw in package $line10
Existem várias condições para esta falha. O tipoC
deve ser parametrizado. O alias deve usar um curinga (C[_]
) A chamada deve usar um alias de tipo, apenas chamandof[C[_]]
funciona bem.
No meu programa, o caso é muito mais complexo, e a única solução que encontrei é fazer com que o método não aceite umManifest
, mas basta dar umaClass
parâmetro, que é feio.
Estou fazendo algo errado? Alguma sugestão para uma melhor solução alternativa? Eu não vi um bug no rastreador de erros do Scala; portanto, se isso parecer legítimo, vou adiante e denunciá-lo.