let print_gType (g: gType) = match g with 
      Basic(b)      ->  "Basic(" ^ (print_bType b) ^ ")"
    | Vector(n,b)   ->  "Vector(" ^ (string_of_int n) ^ "," ^ (print_bType b) ^ ")"
    | Matrix(n,m,b) ->  "Matrix(" ^ (string_of_int n) ^ "," ^ (string_of_int n) ^ "," ^ (print_bType b) ^ ")"