         get      { return v[1] }
         set( y ) { v[1] = y    }
     }
+    init( v: [Float] ) {
+        self.v = [v[0], v[1]]
+    }
 }
 
-struct Vec3: Vector {
+struct Vec3: Vector, SpecializedVector {
+    var count = 3
     var v = [Float]( count: 3, repeatedValue: 0.0 )
     var x: Float {
         get      { return v[0] }

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


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

    var v = [Float]( count: T.literal(), repeatedValue: 0.0 )
}

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] }
