trait Stream { type Item; } trait TryStream: Stream { type TryItem; } impl TryStream for S where S: ?Sized + Stream, { type TryItem = T; } trait Discover { type Service; } impl Discover for D where D: TryStream, { type Service = S; } pub trait Service { type Error; } pub trait MakeService { type Error; type Service: Service<(), Error = Self::Error>; } struct Balance { _dreq: (D, Req), } impl Balance where D: Discover, D::Service: Service, >::Error: Into<()>, { fn new(_: D) -> Self { todo!() } } impl Service for Balance { type Error = (); } impl Stream for MS where MS: MakeService, { type Item = SvcWrap; } pub fn broken() where MS: MakeService, MS::Error: Into<()>, { let d: MS = todo!(); // Error: Apparently Balance::new doesn't exist during MIR validation let _ = Balance::new(d); } struct SvcWrap(Svc); impl> Service for SvcWrap { type Error = Svc::Error; }