1/6

A generic parameter with no bound is nearly useless: the body may only do what works for every type, which is almost nothing.

A bound buys back capability by narrowing the input:

fn describe_all<T: Display>(items: &[T]) -> String

Now the body may call .to_string(), because Display guarantees it exists. The bound is a two-way contract: the caller must supply a Display type, and in exchange the body may rely on it.