В том то и дело, что ты порождаешь новый тип, а не используешь существующий. И это создаёт проблемы, например, когда ответственность за порождение типов лежит не на тебе, ты их получаешь готовые, но тебе с ними надо работать активно и полиморфно в рамках своего домена. В твоём случае здесь уже напрашиваются апкасты/даункасты, если не ошибаюсь.