1. ```rust struct A; // Concrete type `A`. struct S(A); // Concrete type `S`. struct SGen(T); // Generic type `SGen`. fn reg_fn(_s: S) {} fn gen_spec_t(_s: SGen) {} fn gen_spec_i32(_s: SGen) {} fn generic(_s: SGen) {} fn main() { // Using the non-generic functions reg_fn(S(A)); // Concrete type. gen_spec_t(SGen(A)); // Implicitly specified type parameter `A`. gen_spec_i32(SGen(6)); // Implicitly specified type parameter `i32`. // Explicitly specified type parameter `char` to `generic()`. generic::(SGen('a')); // Implicitly specified type parameter `char` to `generic()`. generic(SGen('c')); } ``` 2. ```rust fn sum>(x: T, y: T) -> T { x + y } fn main() { assert_eq!(5, sum(2i8, 3i8)); assert_eq!(50, sum(20, 30)); assert_eq!(2.46, sum(1.23, 1.23)); } ``` 3. ```rust struct Point { x: T, y: T, } fn main() { let integer = Point { x: 5, y: 10 }; let float = Point { x: 1.0, y: 4.0 }; } ``` 4. ```rust // modify this struct to make the code work struct Point { x: T, y: U, } fn main() { // DON'T modify here let p = Point{x: 5, y : "hello".to_string()}; } ``` 5. ```rust struct Val { val: T, } impl Val { fn value(&self) -> &T { &self.val } } fn main() { let x = Val{ val: 3.0 }; let y = Val{ val: "hello".to_string()}; println!("{}, {}", x.value(), y.value()); } ``` 6. ```rust struct Point { x: T, y: U, } impl Point { fn mixup(self, other: Point) -> Point { Point { x: self.x, y: other.y, } } } fn main() { let p1 = Point { x: 5, y: 10 }; let p2 = Point { x: "Hello", y: '中'}; let p3 = p1.mixup(p2); assert_eq!(p3.x, 5); assert_eq!(p3.y, '中'); } ``` 7. ```rust struct Point { x: T, y: T, } impl Point { fn distance_from_origin(&self) -> f32 { (self.x.powi(2) + self.y.powi(2)).sqrt() } } fn main() { let p = Point{x: 5.0_f32, y: 10.0_f32}; println!("{}",p.distance_from_origin()) } ```