Very wordy title, but basically my question is, why am I allowed to do this:
pub fn dot(a: &K, b: &K) -> T where K: InnerProductSpace