trait Monad { type Unwrapped; type Wrapped; fn bind(self, f: F) -> Self::Wrapped { todo!() } } fn join(outer: MOuter) -> MOuter::Wrapped where MOuter: Monad, MInner: Monad>, //~^ ERROR: missing generics for associated type `Monad::Wrapped` { outer.bind(|inner| inner) } fn main() { assert_eq!(join(Some(Some(true))), Some(true)); }