- * If the context hasn't told us the type
- * and a constant set is present
- * we need to infer the type
- * before generating code.
+ * get the type of the right hand side.
+ * if it turns out to be a set,
+ * use that type when getting
+ * the type of the left hand side.
+ * and then use the type of the left hand side
+ * when generating code.
+ * this will correctly decide the type of any
+ * empty sets in the tree, since if the empty set
+ * is on the left hand side it will inherit
+ * the type of the right hand side,
+ * and if it's on the right hand side, its type (intset)
+ * will be overridden by the type of the left hand side.
+ * this is an awful lot of tree traversing,
+ * but it works.