code: func Keys(a Type) Type {
  	switch a := a.(type) {
  	case *Array:
  		return N
  	case *Object:
  		var tpe Type
  		for _, k := range a.Keys() {
  			tpe = Or(tpe, TypeOf(k))
  		}
  		if a.dynamic != nil {
  			tpe = Or(tpe, a.dynamic.Key)
  		}
  		return tpe
  	case *Set:
  		return a.of
  	case Any:
  		// TODO(tsandall): ditto test
  		if Compare(a, A) == 0 {
  			return A
  		}
  		var tpe Type
  		for i := range a {
  			tpe = Or(Keys(a[i]), tpe)
  		}
  		return tpe
  	}
  	return nil
  }
docs: // Keys returns the type of keys that can be enumerated for a. For arrays, the
  // keys are always number types, for objects the keys are always string types,
  // and for sets the keys are always the type of the set element.