pub trait VecOps {
type Scalar;
fn add(&self, other: &Self) -> Self;
fn sub(&self, other: &Self) -> Self;
fn mul(&self, other: &Self) -> Self;
fn div(&self, other: &Self) -> Self;
fn dot(&self, other: &Self) -> Self::Scalar;
}