+instance >< Color where\r
+ (><) a b = colorToGen a >< colorToGen b\r
+\r
+instance >< (a, b) | >< a & >< b where\r
+ (><) a b = tupleToGen a >< tupleToGen b\r
+\r
+instance >< (Tree a) | >< a where\r
+ (><) a b = treeToGen a >< treeToGen b\r
+\r
+colorToGen :: Color -> ColorG\r
+colorToGen Blue = LEFT UNIT\r
+colorToGen Yellow = RIGHT (LEFT UNIT)\r
+colorToGen Red = RIGHT (RIGHT UNIT)\r
+\r
+tupleToGen :: (a, b) -> TupleG a b\r
+tupleToGen (x, y) = PAIR x y\r
+\r
+treeToGen :: (Tree a) -> TreeG a\r
+treeToGen Tip = LEFT UNIT\r
+treeToGen (Bin x xr xl) = RIGHT (PAIR x (PAIR xr xl))\r
+\r
+//3.2. Yes\r
+//3.3. Less defining and easier overloading\r
+//3.4. Overhead, the compiler has to translate on and on\r
+\r
+Start = [Red >< Yellow, Blue >< Yellow, Blue >< Blue,\r
+ (Bin 1 Tip Tip) >< Tip,\r
+ (Bin 1 Tip Tip) >< (Bin 1 Tip Tip),\r
+ Tip >< (Bin 1 Tip Tip) ]\r