ну мне хотелось описать инвариант на уровне типов, чтобы туда физически не положить невалидные данные
еще раз - если ты парсишь - ты делаешь это в рантайме, значит итоговый тип у тебя в рантайме только сможет получиться и значит ты не можешь к нему никаких компайл тайм проверок накрутить
еще раз - если ты парсишь - ты делаешь это в рантайме, значит итоговый тип у тебя в рантайме только сможет получиться и значит ты не можешь к нему никаких компайл тайм проверок накрутить
ну это как с Refined, что у него есть compile-time проверки, и есть runtime, которые возвращают Either