typelevel / scala

Typelevel Scala, a fork of Scala
http://typelevel.org/scala/
372 stars 21 forks source link

Inconsistent behaviour when parameterising singleton type #179

Open tindzk opened 6 years ago

tindzk commented 6 years ago

The following example yields a type mismatch:

class StringSingletonList[T <: Singleton with String](values: List[T])
new StringSingletonList(List("a", "a"))
// inferred type arguments [String] do not conform to class StringSingletonList's type parameter bounds [T <: Singleton with String]

Strangely, the argument's type is inferred correctly:

List("a", "a"): List[_ <: Singleton with String] 
// res1: List[String] = List("a", "a")

These two declarations can be used as a workaround:

class StringSingletonList[T <: Singleton](values: List[T with String])
class StringSingletonList[T <: String](values: List[T with Singleton])