use std::marker::PhantomData;

type Component = fn(&());

struct Wrapper {
    router: Router<(Component, Box<Self>)>,
}

struct Match<C>(PhantomData<C>);

struct Router<T>(PhantomData<T>);

impl<T> Router<T> {
    pub fn at(&self) -> Result<Match<&T>, ()> {
        todo!()
    }
}

impl Wrapper {
    fn at(&self, path: &str) -> Result<(Component, Box<Self>), ()> {
        let (cmp, router) = self.router.at()?;
        //~^ ERROR mismatched types
        todo!()
    }
}

fn main() {}