Как работает черта NotNull в 2.8 и кто-нибудь на самом деле ее использует?

trait NotNull {}

Я пытался понять, как эта черта может гарантировать, что что-то не является нулевым, и я не могу понять это:

def main(args: Array[String]) {
  val i = List(1, 2) 
  foo(i) //(*)
}

def foo(a: Any) = println(a.hashCode)

def foo(@NotNull a: Any) = println(a.hashCode) //compile error: trait NotNull is abstract

def foo(a: Any with NotNull) = println(a.hashCode) //compile error: type mismatch at (*)

А также:

val i = new Object with NotNull //compile-error illegal inheritance

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

trait MyTrait {}

def main(args: Array[String]) {
  val i: MyTrait = null
  println(i)
}

Принимая во внимание, что это не:

def main(args: Array[String]) {
  val i: NotNull = null //compile error: found Null(null) required NotNull
  println(i)
} 

РЕДАКТИРОВАТЬ: в программировании на Scala ничего нет

Ответы на вопрос(2)

Ваш ответ на вопрос