Closed as not planned
Closed as not planned
Description
Compiler version
3.2.1
Minimized code
https://scastie.scala-lang.org/mrdziuban/kOxLqWh4S5iXYTAqxvY6gw/11
// Equivalent encoding to shapeless
// https://github.com/milessabin/shapeless/blob/main/core/shared/src/main/scala/shapeless/labelled.scala#L24-L32
type FieldType[K, +V] = V with KeyTag[K, V]
trait KeyTag[K, +V] extends Any
def field[K]: [v] => v => FieldType[K, v] = [v] => (v: v) => v.asInstanceOf[FieldType[K, v]]
type SB = FieldType["str", String] *: FieldType["bool", Boolean] *: EmptyTuple
type ISB = FieldType["int", Int] *: SB
val isb: ISB = field["int"](1) *: field["str"]("foo") *: field["bool"](true) *: EmptyTuple
val sb: SB = isb.tail
Output
-- [E007] Type Mismatch Error: /Users/matt/scala-3-playground/src/main/scala/example/Test.scala:14:15
14 | val sb: SB = isb.tail
| ^^^^^^^^
|Found: Tuple.Tail[(example.Test.FieldType[("int" : String), Int],
| example.Test.FieldType[("str" : String), String]
|, example.Test.FieldType[("bool" : String), Boolean])]
|Required: example.Test.SB
|
|Note: a match type could not be fully reduced:
|
| trying to reduce Tuple.Tail[
| (example.Test.FieldType[("int" : String), Int],
| example.Test.FieldType[("str" : String), String]
| , example.Test.FieldType[("bool" : String), Boolean])
|]
| failed since selector (example.Test.FieldType[("int" : String), Int],
| example.Test.FieldType[("str" : String), String]
|, example.Test.FieldType[("bool" : String), Boolean])
| is uninhabited (there are no values of that type).
|----------------------------------------------------------------------------
| Explanation (enabled by `-explain`)
|- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
| Tree: example.Test.isb.tail[
|
| (example.Test.FieldType[("int" : String), Int],
| example.Test.FieldType[("str" : String), String]
| , example.Test.FieldType[("bool" : String), Boolean])
|
| ]
| I tried to show that
| Tuple.Tail[
| (example.Test.FieldType[("int" : String), Int],
| example.Test.FieldType[("str" : String), String]
| , example.Test.FieldType[("bool" : String), Boolean])
| ]
| conforms to
| example.Test.SB
| but the comparison trace ended with `false`:
|
| ==> AppliedType(TypeRef(TermRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Tuple),Tail),List(TypeVar(TypeParamRef(This) -> AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(int)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Int))), TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type SB)))))) <: TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type SB)
| ==> AppliedType(TypeRef(TermRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Tuple),Tail),List(TypeVar(TypeParamRef(This) -> AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(int)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Int))), TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type SB)))))) <: AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(str)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class scala)),object Predef),type String))), AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(bool)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Boolean))), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class scala)),object Tuple$package),type EmptyTuple)))))
| ==> MatchType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),trait Tuple),TypeVar(TypeParamRef(This) -> AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(int)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Int))), TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type SB)))),List(HKTypeLambda(List(_$15, xs), List(TypeBounds(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Nothing),TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Any)), TypeBounds(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Nothing),TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),trait Tuple))), AppliedType(TypeRef(ThisType(TypeRef(NoPrefix,module class runtime)),class MatchCase),List(AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),*:),List(TypeParamRef(_$15), TypeParamRef(xs))), TypeParamRef(xs)))))) <: AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(str)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class scala)),object Predef),type String))), AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(bool)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Boolean))), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class scala)),object Tuple$package),type EmptyTuple)))))
| ==> TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),trait Tuple) <: AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(str)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class scala)),object Predef),type String))), AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(bool)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Boolean))), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class scala)),object Tuple$package),type EmptyTuple)))))
| <== TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),trait Tuple) <: AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(str)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class scala)),object Predef),type String))), AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(bool)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Boolean))), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class scala)),object Tuple$package),type EmptyTuple))))) = false
| <== MatchType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),trait Tuple),TypeVar(TypeParamRef(This) -> AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(int)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Int))), TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type SB)))),List(HKTypeLambda(List(_$15, xs), List(TypeBounds(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Nothing),TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Any)), TypeBounds(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Nothing),TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),trait Tuple))), AppliedType(TypeRef(ThisType(TypeRef(NoPrefix,module class runtime)),class MatchCase),List(AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),*:),List(TypeParamRef(_$15), TypeParamRef(xs))), TypeParamRef(xs)))))) <: AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(str)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class scala)),object Predef),type String))), AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(bool)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Boolean))), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class scala)),object Tuple$package),type EmptyTuple))))) = false
| <== AppliedType(TypeRef(TermRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Tuple),Tail),List(TypeVar(TypeParamRef(This) -> AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(int)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Int))), TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type SB)))))) <: AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(str)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class scala)),object Predef),type String))), AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(bool)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Boolean))), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class scala)),object Tuple$package),type EmptyTuple))))) = false
| <== AppliedType(TypeRef(TermRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Tuple),Tail),List(TypeVar(TypeParamRef(This) -> AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(int)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Int))), TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type SB)))))) <: TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type SB) = false
|
| The tests were made under a constraint with:
| uninstantiated variables: This
| constrained types:
| [This >: (example.Test.isb : example.Test.ISB) <: NonEmptyTuple]:
| Tuple.Tail[This]
| bounds:
| This >: (example.Test.isb : example.Test.ISB) <: NonEmptyTuple
| ordering:
----------------------------------------------------------------------------
Explanation
===========
[error]
Tree: example.Test.isb.tail[
[error]
(example.Test.FieldType[("int" : String), Int],
example.Test.FieldType[("str" : String), String]
, example.Test.FieldType[("bool" : String), Boolean])
[error]
]
I tried to show that
Tuple.Tail[
(example.Test.FieldType[("int" : String), Int],
example.Test.FieldType[("str" : String), String]
, example.Test.FieldType[("bool" : String), Boolean])
]
conforms to
example.Test.SB
but the comparison trace ended with `false`:
[error]
==> AppliedType(TypeRef(TermRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Tuple),Tail),List(TypeVar(TypeParamRef(This) -> AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(int)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Int))), TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type SB)))))) <: TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type SB)
==> AppliedType(TypeRef(TermRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Tuple),Tail),List(TypeVar(TypeParamRef(This) -> AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(int)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Int))), TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type SB)))))) <: AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(str)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class scala)),object Predef),type String))), AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(bool)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Boolean))), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class scala)),object Tuple$package),type EmptyTuple)))))
==> MatchType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),trait Tuple),TypeVar(TypeParamRef(This) -> AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(int)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Int))), TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type SB)))),List(HKTypeLambda(List(_$15, xs), List(TypeBounds(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Nothing),TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Any)), TypeBounds(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Nothing),TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),trait Tuple))), AppliedType(TypeRef(ThisType(TypeRef(NoPrefix,module class runtime)),class MatchCase),List(AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),*:),List(TypeParamRef(_$15), TypeParamRef(xs))), TypeParamRef(xs)))))) <: AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(str)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class scala)),object Predef),type String))), AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(bool)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Boolean))), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class scala)),object Tuple$package),type EmptyTuple)))))
==> TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),trait Tuple) <: AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(str)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class scala)),object Predef),type String))), AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(bool)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Boolean))), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class scala)),object Tuple$package),type EmptyTuple))))
<== TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),trait Tuple) <: AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(str)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class scala)),object Predef),type String))), AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(bool)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Boolean))), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class scala)),object Tuple$package),type EmptyTuple))))) = false
<== MatchType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),trait Tuple),TypeVar(TypeParamRef(This) -> AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(int)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Int))), TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type SB)))),List(HKTypeLambda(List(_$15, xs), List(TypeBounds(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Nothing),TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Any)), TypeBounds(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Nothing),TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),trait Tuple))), AppliedType(TypeRef(ThisType(TypeRef(NoPrefix,module class runtime)),class MatchCase),List(AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),*:),List(TypeParamRef(_$15), TypeParamRef(xs))), TypeParamRef(xs)))))) <: AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(str)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class scala)),object Predef),type String))), AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(bool)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Boolean))), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class scala)),object Tuple$package),type EmptyTuple))))) = false
<== AppliedType(TypeRef(TermRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Tuple),Tail),List(TypeVar(TypeParamRef(This) -> AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(int)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Int))), TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type SB)))))) <: AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(str)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class scala)),object Predef),type String))), AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(bool)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Boolean))), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class scala)),object Tuple$package),type EmptyTuple))))) = false
<== AppliedType(TypeRef(TermRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Tuple),Tail),List(TypeVar(TypeParamRef(This) -> AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class *:),List(AppliedType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type FieldType),List(ConstantType(Constant(int)), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Int))), TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type SB)))))) <: TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class example)),module class Test$)),type SB) = false
[error]
The tests were made under a constraint with:
uninstantiated variables: This
constrained types:
[This >: (example.Test.isb : example.Test.ISB) <: NonEmptyTuple]:
Tuple.Tail[This]
bounds:
This >: (example.Test.isb : example.Test.ISB) <: NonEmptyTuple
ordering:
Expectation
The compiler can prove that Tuple.Tail[ISB] =:= SB