anselmschueler

joined 2 years ago
[–] anselmschueler@ieji.de 0 points 2 weeks ago (1 children)

@capuccino

Then, when you write somewhere that some type satisfies a trait, like "T: Foo", and Foo has an associated type, you can further specify that not only does T need to implement Foo, but that the associated type satisfies some criteria.

You can do this two ways:
"Foo<Bar = Something>" says it has to be something specific,
"Foo<Bar: Baz>" says that it has to implement another trait

[–] anselmschueler@ieji.de 1 points 2 weeks ago (2 children)

@capuccino

A trait can have an associated type. You write this "trait Foo { type Bar; }". Then, when you implement the trait, you have to specify this type, with "type Bar = Something;". This is different from the trait itself being generic, because there can only be a single associated type, so you can't implement the trait multiple times with different associated types.

[–] anselmschueler@ieji.de 4 points 2 weeks ago (1 children)

@capuccino An alternative is to not use T: Add<Output = T>, but to replace your usage of T, where it represents the output type, with <T as Add>::Output

[–] anselmschueler@ieji.de 6 points 2 weeks ago (6 children)

@capuccino You're not assigning anything. The Output = T is expressing a constraint. It's saying that the addition of T has to result in T again. A type can implement Add with any output type it wants.