Я пытался выработать несколько простых примеров программирования уровня на Scala 2.11. Вот функция сказать типа равенства:Неожиданное неявное разрешение в scala
def type_==[A, B](implicit ev: A =:= B = null) = ev != null
Здесь =:=
определяется в прелюдии, но для нашей цели, даже простое определение, такие как
class =:=[A, B]
implicit def equalTypeInstance[A] = new =:=[A, A]
будет делать. Конечно, можно сделать
type_==[Int, String] // false
type_==[Int, Int] // true
Далее закодировать булевы как типы - сделать простые вещи, я избегаю, чтобы определить какой-либо операции
sealed trait Bool
trait True extends Bool
trait False extends Bool
Я могу снова проверить, что
type_==[True, True] // true
Итак, я думал, что смогу преобразовать Bool
в Boolean
, выполнив
def bool2boolean[A <: Bool] = type_==[A, True]
Вот улов:
bool2boolean[True] // false
Может кто-нибудь объяснить причину, почему?