Why doesn't Scala fully infer type parameters when type parameters are nested?

后端 未结 3 1821
傲寒
傲寒 2020-12-31 08:46

Consider the following Scala code:

abstract class A
abstract class B[T <: A]
class ConcreteA extends A
class ConcreteB extends B[ConcreteA]

class Example         


        
3条回答
  •  遥遥无期
    2020-12-31 09:07

    Kipton got close with his higher-kinded solution. Unfortunately he tripped over what appears to be a bug in Scala < 2.9.1.RC1. The following works as expected with 2.9.1.RC1 and trunk,

    Welcome to Scala version 2.9.1.RC1 (Java HotSpot(TM) Server VM, Java 1.7.0).
    Type in expressions to have them evaluated.
    Type :help for more information.
    
    scala> abstract class A
    defined class A
    
    scala> abstract class B[T <: A]
    defined class B
    
    scala> class ConcreteA extends A
    defined class ConcreteA
    
    scala> class ConcreteB[T <: A] extends B[T]
    defined class ConcreteB
    
    scala> class Example[T <: A, U[X <: A] <: B[X]](resolver: U[T])
    defined class Example
    
    scala> new Example(new ConcreteB[ConcreteA])
    res0: Example[ConcreteA,ConcreteB] = Example@ec48e7
    

提交回复
热议问题