For your last proposition, there is no way to disambiguate between a type
restriction and a static:
type Vector[T; N: int or uint] = object
var v: Vector[int, uint]
Run
is different from
type Vector[T; N: static[int or uint]] = object
var v: Vector[int, 10]
Run
(not sure it compiles but it's just to illustrate the need of static)
