отдельный трейт просто для того, чтобы заставить компилятор вывести тип возвращаемого значения транзиции конечного автомата
к нам на вход приходит терм этого типа, а попросить сам тип нельзя, приходится для типа этого терма реализовывать трейт и сохранять в type Output его тип