The code below doesn\'t compile if I uncomment the line indicated. The compiler complains: \"stable identifier required\".
val Empty = Stream.empty
val a
You can't pattern match on Stream.empty because it is a method (in object Stream) that always returns the empty stream (but the compiler doesn't know that).
Instead of assigning val empty = Stream.empty, you can match on Stream.Empty, which is an Object :
scala> a match {
case Stream.Empty => println("done")
case h #:: tl => println(h)
}