map
reduce
T: Protocol
func square<T: Numeric>(of values: [T]) -> [T] { values.map { $0 * $0 } }
func square<variadic T: Numeric>(of values: (T...)) -> (T...) { values.map { $0 * $0 } }