blob: 6d73fd68dbed17b4247a0371bc6560b17c2ec008 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#![feature(generic_associated_types)]
trait Monad {
type Unwrapped;
type Wrapped<B>;
fn bind<B, F>(self, f: F) -> Self::Wrapped<B> {
todo!()
}
}
fn join<MOuter, MInner, A>(outer: MOuter) -> MOuter::Wrapped<A>
where
MOuter: Monad<Unwrapped = MInner>,
MInner: Monad<Unwrapped = A, Wrapped = MOuter::Wrapped<A>>,
//~^ ERROR: missing generics for associated type `Monad::Wrapped`
{
outer.bind(|inner| inner)
}
fn main() {
assert_eq!(join(Some(Some(true))), Some(true));
}
|