     var v = [Float]( count: T.literal(), repeatedValue: 0.0 )
 }
 
-struct Vec2: Vector {
+protocol SpecializedVector {
+    var v: [Float] { get set }
+    var count: Int { get }
+    init( v: [Float] )
+}
+
+struct Vec2: Vector, SpecializedVector {
+    var count = 2
     var v = [Float]( count: 2, repeatedValue: 0.0 )
     var x: Float {
         get      { return v[0] }

        get      { return v[2] }
        set( w ) { v[2] = w    }
    }
}

func dot<T:Nat>( a: Vec<T>, b: Vec<T> ) -> Float {

        get      { return v[1] }
        set( y ) { v[1] = y    }
    }
    init( v: [Float] ) {
        self.v = [v[0], v[1]]
    }
}

struct Vec3: Vector, SpecializedVector {
    var count = 3
    var v = [Float]( count: 3, repeatedValue: 0.0 )
    var x: Float {
        get      { return v[0] }
