ну вот ты допустим хочешь а и б тип иметь. при этом а и б - классы. теперь вопрос - что эти классы делают? почему нельзя создать 2 интерфейса с теми же методами, и не написать класс, имеющий все поля классов а и б, и реализующий оба интерфейса, и использовать его там?
Вы определитесь наконец: класс - это у вас полноценный тип или нет? Почему у вас теперь классы в качестве типов не устраивают (выше писали, что любой тип можно классами)? Может, классы таки не совсем устраивают теорию категорий?