Т.е. мы можем проводить подобные трансформации, мы не должны везде и всюду типизировать убогие трейты дерьма. И самое важное - мы получаем нормальные ошибки
Почему же? Разве не в месте вызова? Если тип не реализует трейт, в месте передачи на это и отругает. Прямо как в твоём примере. Или ты имеешь в виду что-то другое?