Побочные эффекты в Scala
Я учу Scala прямо в эти дни. Я немного знаком с Хаскеллом, хотя не могу утверждать, что хорошо его знаю.
Parenthetical remark for those who are not familiar with Haskell
Одна особенность, которая мне нравится в Haskell, заключается в том, что не только функции являются первоклассными гражданами, но и побочные эффекты (позвольте мне называть их действиями). Действие, которое при выполнении наделяет вас значением типаa
принадлежит к определенному типуIO a
, Вы можете передавать эти действия практически так же, как любые другие значения, и комбинировать их интересными способами.
По факту,combining побочные эффекты - единственный способ в Haskell что-то сделать с ними, так как вы не можете выполнить их. Скорее программа, котораяwill будет выполнено, это комбинированное действие, которое возвращается вашимmain
функция. Это хитрый трюк, который позволяет функциям быть чистыми, в то же время позволяя вашей программе делать что-то, кроме потребления энергии.
Основным преимуществом этого подхода является то, что компилятор знает части кода, в которых вы выполняете побочные эффекты, поэтому он может помочь вам обнаруживать ошибки с ними.
Actual question
Есть ли в Scala какой-то способ заставить вас проверять тип побочных эффектов компилятора, чтобы, например, вы гарантированно не выполняли побочные эффекты внутри определенной функции?