> It certainly shouldn't be *, nor should it be an error... technically an > empty union should be a null set, which would correspond to either a > non-extant type or to no return/value at all...
Well, the problem is: there is no non-extant type, no "bottom": we simply use the Scheme type system (slightly extended) that clearly describes what types values can have and in Scheme every value has a type, there are no programs that are unsound on the type level - they may break at run-time, but are still valid Scheme code. There are meta-types like "undefined", which is the same as the union of all possible types, but explicitly declared as undefined by the standard. CHICKEN uses other meta types like "*" for convenience, and "or" and "forall" for limiting the possible set of types a value can have, but there are still very much concrete types for concrete values. The number of return values on the other hand is not a type-related concept, it is an operational thing (the number of arguments to pass to the continuation), so I would not mix these two issues. There can be no "(or)"-typed value in a Scheme system, there can be the absence of a return (like calling a continuation), but that is, I believe, the area of effect systems. felix