trait Foo {
    type A;
    fn test(a: Self::A) -> Self::A {
        a
    }
}
struct Bar(i32);
impl Foo for Bar {
    type A = i32;
}
struct Baz(f32);
impl Foo for Baz {
    type A = f32;
}
fn main() {
    let a;
    a = Bar(123);
    let b;
    b = Bar::test(a.0);
    let c;
    c = Baz(123f32);
    let d;
    d = Baz::test(c.0);
}