p у Вас это impl Parser, то есть неявный дженерик. Если бы был явным, то это было бы fn new<P: Parser>(p: P) -> Self. Соответственно, так как p - это любой тип, то он может быть и ссылкой и любым другим reference-типом, который содержит в себе лайфтаймы. А Box<dyn Parser> - это на самом деле сокращенное от Box<dyn Parser + 'static>. Потому и не сходится. Попробуйте fn new(p: impl Parser + 'static) -> Self