¿Cómo funciona el rasgo NotNull en 2.8 y alguien realmente lo usa?

trait NotNull {}

He estado tratando de ver cómo este rasgo puede garantizar que algo no sea nulo y no puedo entenderlo:

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 (*)

Y:

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

Obviamente hay un tratamiento especial de compilación en curso porque esto compila:

trait MyTrait {}

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

Mientras que esto no:

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

EDITAR: no hay nada sobre esto que pueda encontrar en la programación en Scala

Respuestas a la pregunta(2)

Su respuesta a la pregunta