Because exception are loose in kotlin, and a viewmodel has no idea what exceptions are thrown upstream in a datasource... and shouldn't have to know. Results allow to map errors to domain errors via monads, which have more sense when reaching UI.