blob: 8f2cc45509ffcbd4bd1cfd4bf639d34ef33f7ca7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
// check-fail
// known-bug: unknown
// We almost certainly want this to pass, but
// it's particularly difficult currently, because we need a way of specifying
// that `<Self::Base as Functor>::With<T> = Self` without using that when we have
// a `U`. See `https://github.com/rust-lang/rust/pull/92728` for a (hacky)
// solution. This might be better to just wait for Chalk.
pub trait Functor {
type With<T>;
fn fmap<T, U>(this: Self::With<T>) -> Self::With<U>;
}
pub trait FunctorExt<T>: Sized {
type Base: Functor<With<T> = Self>;
fn fmap<U>(self) {
let arg: <Self::Base as Functor>::With<T>;
let ret: <Self::Base as Functor>::With<U>;
arg = self;
ret = <Self::Base as Functor>::fmap(arg);
}
}
fn main() {}
|