Ответ 1
Потому что Scala не является чистым (и не имеет средств для обеспечения того, что функция чиста, как и у D) и дает побочные эффекты. Он тесно взаимодействует с Java (например, повторно использует большие части библиотек Java). Scala не ленив, поэтому нет проблем с выполнением порядка, например, в Haskell (например, нет необходимости в >>
или seq
). В этих условиях введение IO Monad сделало бы жизнь более сложной, не наживаясь.
Но если у вас действительно есть приложения, где монада IO имеет существенные преимущества, ничто не мешает вам писать свою собственную реализацию или использовать scalaz. См. http://apocalisp.wordpress.com/2011/12/19/towards-an-effect-system-in-scala-part-2-io-monad/
[изменить]
Почему это не было сделано как ленивый и чистый язык?
Это было бы совершенно возможно (например, посмотрите Frege, язык JVM очень похож на Haskell). Разумеется, это улучшит совместимость Java, но я не думаю, что это основная причина. Я думаю, что ленивый и чистый язык - это абсолютно здорово, но просто слишком чуждо большинству программистов на Java, которые являются целевой аудиторией Scala. Scala был разработан для взаимодействия с объектной моделью Java (которая является полной противоположностью чистой и ленивой), позволяя функциональное и смешанное программирование с функциональным OO, но не применяя его (что бы преследовало почти всех программистов на Java). На самом деле нет смысла иметь еще один полностью функциональный язык: есть Haskell, Erlang, F # (и другие ML) и Clojure (и другие схемы /Lisps ), которые все очень сложные, стабильные и успешные, и выиграли 'легко заменить новичком.