Extend vec type with an optional erased length to make type rules a bit easier, flesh out some remaining type rules