sealed class ResponseResult { class Success(val value: T) : ResponseResult() class Failure(val failureType: FailureType) : ResponseResult() } //elsewhere fun getChangeset(token: String?) : ResponseResult { return try { ResponseResult.Success(service.getChangeset(token)) //return type is Changeset } catch (t: Throwable) { ResponseResult.Failure(exceptionAsFailureType(t)) } } //elsewhere.... fun updateList(token: String?) { scope.launch { when (val result = getChangeset(token)) { is ResponseResult.Success -> result.value //<- not seeing type is Changeset is ResponseResult.Failure -> when (result.value) { FailureType.SERVER_ERROR -> // etc } } } }