Потому что Scala не является чистым (и не имеет средств для обеспечения того, чтобы функция была чистой, как D), и допускает побочные эффекты.Он тесно взаимодействует с Java (например, повторно использует большие части библиотек Java).Scala не ленив, поэтому нет проблем с порядком выполнения, как в Haskell (например, нет необходимости в >>
или seq
).В этих условиях введение монады ввода-вывода усложнило бы жизнь без большого выигрыша.
Но если у вас действительно есть приложения, в которых монада ввода-вывода имеет существенные преимущества, ничто не мешает вам написать собственную реализацию или использовать скалаз.См., Например, 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), которые все очень сложные, стабильные и успешные, и не будутбыть легко замененным новичком.