Объяснение
Sealed-иерархия ограничивает варианты модели и помогает exhaustiveness-проверке when. Делегирование передаёт реализацию поведения другому объекту. Data class не гарантирует глубокую неизменяемость.
Задача для самостоятельного решения
Как представить Loading, Success и Failure без трёх независимых флагов?
Показать разбор ответа
Использовать sealed тип с тремя вариантами. Так нельзя одновременно оказаться и в загрузке, и в ошибке из-за несогласованных boolean-полей.