Index: libcfa/src/vector.hfa
===================================================================
--- libcfa/src/vector.hfa	(revision 8bbdfddcf2464b44a41e3b4122ea0d0a04ab6973)
+++ libcfa/src/vector.hfa	(revision 9a83ccd6ddb602af37aa354436dcee1ac6731ccb)
@@ -1,8 +1,9 @@
 #pragma once
-#include <math.h>
-
+#include "math.hfa"
+#include <iostream.hfa>
 
 //---------------------- Vector Types ----------------------
 // TODO: make generic, as per glm
+
 
 struct vec2 {
@@ -10,9 +11,28 @@
 };
 
-//---------------------- Geometric Functions ----------------------
-// These functions implement the Geometric Functions section of GLSL
+void ?{}( vec2 & v, float x, float y) {
+    v.[x, y] = [x, y];
+}
 
-static inline float dot(const vec2& v, const vec2& u) {
-    return v.x * u.x + v.y * u.y;
+forall( dtype ostype | ostream( ostype ) ) {
+    ostype & ?|?( ostype & os, const vec2& v) with (v) {
+        if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
+        fmt( os, "<%g,%g>", x, y);
+        return os;
+    }
+    void ?|?( ostype & os, const vec2 v ) {
+        (ostype &)(os | v); ends( os );
+    }
+}
+
+vec2 ?-?(const vec2& u, const vec2& v) {
+    return [u.x - v.x, u.y - v.y];
+}
+
+/* //---------------------- Geometric Functions ---------------------- */
+/* // These functions implement the Geometric Functions section of GLSL */
+
+static inline float dot(const vec2& u, const vec2& v) {
+    return u.x * v.x + u.y * v.y;
 }
 
