Я изучаю Scala в наши дни. У меня слабое знакомство с Haskell, хотя я не могу утверждать, что хорошо это знаю.
Паратетическое замечание для тех, кто не знаком с Haskell
Одна черта, которая мне нравится в Haskell, заключается в том, что не только функции являются первоклассными гражданами, но и побочными эффектами (позвольте мне назвать их действия). Действие, которое при выполнении наделяет вас значением типа a
, относится к определенному типу IO a
. Вы можете передавать эти действия примерно так же, как и любое другое значение, и комбинировать их интересными способами.
Фактически, объединение побочных эффектов - единственный способ в Haskell сделать что-то с ними, так как вы не можете их выполнить. Скорее, программа, которая будет выполнена, представляет собой комбинированное действие, которое возвращается вашей функцией main
. Это аккуратный трюк, который позволяет функциям быть чистыми, в то время как ваша программа действительно делает что-то другое, кроме потребляемой мощности.
Основное преимущество этого подхода заключается в том, что компилятор знает части кода, где вы выполняете побочные эффекты, поэтому он может помочь вам поймать ошибки с ними.
Актуальный вопрос
Есть ли какой-нибудь способ в Scala, чтобы у вас были проверки побочных эффектов типа компилятора, так что, например, вы гарантированно не выполняете побочные эффекты внутри определенной функции?