Event() data class PasswordInputChanged(val pass: String) : Event() Data classes representing different types of events that can happen in your domain.
(event) { ... is LoginRequested -> onLoginRequested(model) } fun onLoginRequested(model: Model): Model = if (!model.loggingIn && model.canLogin) model.copy(loggingIn = true) else model
pass: String) : Effect() data class ShowErrorMessage(val msg: String) : Effect() Data classes representing different types of effects your program would like to happen.
.map { result -> when (result) { is Success -> LoginSuccessful is Timeout -> LoginFailed("Login request timed out!") is Failure -> LoginFailed(result.message) } } }