trait bound
genericな型に対して、traitで制限を設ける
hsの型クラス制約と同じ

いくつかの書き方がある
インライン記法
上にも書いた「:」で指定するもの
rsfn hoge<T: HogeTrait>(t: T) {
...
}
複数ある場合は +
で繋ぐ
rsfn top_ten<T: Debug + Hash + Eq>(values: &Vec<T>) {..}
where記法
where
を使う
冗長だがもっとも柔軟な書き方
trait自信がgenricsだと、これでしか書けない
rsfn hoge<T>(t: T)
where
T: HogeTrait
{
...
}
impl Trait記法
impl
を使う
型パラメータを明示せずにかける
ただし、その本来の型パラメータなるものを使いまわしできない
引数、戻り値にそれを指定するとか
rsfn hoge(t: impl HogeTrait){
...
}
他言語で似てる機能
あまり真面目に読んでない

「トレイト境界」という訳について
「トレイト制約」の方が良さげかも、という議論