+ }
+
+ public static Kind rangeOfArrow(Kind kind) {
+ kind = canonical(kind);
+ if(kind instanceof KArrow)
+ return ((KArrow)kind).range;
+ else if(kind instanceof KMetaVar) {
+ Kind domain = Kinds.metaVar();
+ Kind range = Kinds.metaVar();
+ try {
+ ((KMetaVar)kind).setRef(arrow(domain, range));
+ } catch (KindUnificationException e) {
+ // Should not fail because kind is canonical
+ e.printStackTrace();
+ }
+ return range;
+ }
+ else
+ throw new InternalCompilerError("Assumed arrow kind but encountered " + kind + ".");