pub trait Semantics { type Name; type Index: Copy; // Required methods fn name(&self) -> Self::Name; fn index(&self) -> Self::Index; }