Зачем это вообще компилируется?

scala> var x:Option[String] = null
x: Option[String] = null

scala> for (v <- x) v
java.lang.NullPointerException


В Джаве почти все что угодно может быть null, в Скале решили "исправить ситуацию" добавив еще одну разновидность null-ов.

P.S.
Я теперь понимаю, о чем говорит это джентльмен.
http://www.youtube.com/watch?v=TS1lpKBMkgg

UPDATE
Опрос общественного мнения в Scala User Group показал, что практикующие программисты на Скале не считают это проблемой.
Tags:
Дык. Живём в обстановке абсурда.

И действительно, нафиг это компилировать-то.
Вот возьмем x:Option[String]. У него ровно 3 нуливых значения: null, None, Some(null).
Я понимаю, что 2 из них "никто не использует", но это так же верно как в "C++ никто не должен выходить за границы массива" или "не надо дважды освобождать память".
Если висит ружьё... ну вы поняли.
Кстати, а есть в природе хорошие примеры языков где есть references, которые не-referentially transparent, и при этом там не может быть нуллов?
В Cyclone есть разные типы указателей, некоторые из них не могут принимать значения NULL. При присваивании должна производится проверка.
Для Option[String] null является допустимым значением? Какой кошмар.
Вторая часть не менее любопытна, конструкции языка (for - идиоматический способ проверки Option) к этому не готовы.
Не факт.
Судя по картинке http://www.scala-lang.org/old/sites/default/files/images/classhierarchy.img_assist_custom.png это в системе типов живет, т.е. Option является reference type вместо value type. По идее - потому что альтернативы None и Some имитируются в виде наследников Option, а value type вроде наследоваться не умеет?
В JVM только примитивы являются value type-ами. Поэтому о наследовании речь не идет.
Однако, на мой взгляд, это не причина прогибаться подо все болячки JVM.

Edited at 2013-11-14 10:53 am (UTC)
Value classes -- аналог newtype в Haskell, там может быть один конструктор с одним аргументом. Если использовать null как значение аргумента для None, то это не сработает с None: Option[Int], например.