When working with generics, the type parameters (e.g. Ty) may use traits (e.g. Tr) as bounds (e.g. Ty: Tr, which reads as: Ty must implement the Tr trait). Bounding has two effects:
let ty: Ty = (...)) can now access the methods (ty.tr()) of the traits specified in the bounds.{bounds.play}