Проверка эквивалентности типов Scala на типах Singleton - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть функция, чтобы засвидетельствовать эквивалентность типов:

def typeEq[A, B](a: A, b: B)(implicit ev: A =:= B) = println("happy")
typeEq: [A, B](a: A, b: B)(implicit ev: A =:= B)Unit

Не удается проверить следующие два разных типа синглтона:

class X
val a = new X; val b = new X
val aa:a.type = a; val bb:b.type = b
typeEq(aa, bb)

Однако, если я напишу так, компилятор будет работать нормально:

class X
val a = new X; val b = new X
type atype=a.type; type btype=b.type
val aa:atype = a; val bb:btype = b
typeEq(aa, bb)

<console>:15: error: Cannot prove that atype =:= btype.
   typeEq(aa, bb)
         ^

Ценю вашу помощь.

...