package org.simantics.scl.compiler.types; import gnu.trove.map.hash.THashMap; import gnu.trove.set.hash.THashSet; import java.util.ArrayList; import org.simantics.scl.compiler.environment.Environment; import org.simantics.scl.compiler.internal.types.TypeHashCodeContext; import org.simantics.scl.compiler.internal.types.ast.TApplyAst; import org.simantics.scl.compiler.internal.types.ast.TypeAst; import org.simantics.scl.compiler.types.exceptions.KindUnificationException; import org.simantics.scl.compiler.types.kinds.Kind; import org.simantics.scl.compiler.types.kinds.Kinds; import org.simantics.scl.compiler.types.util.Polarity; import org.simantics.scl.compiler.types.util.TypeUnparsingContext; public class TPred extends Type { public static final TPred[] EMPTY_ARRAY = new TPred[0]; public final TCon typeClass; public final Type[] parameters; TPred(TCon typeClass, Type ... parameters) { if(NULL_CHECKS) { if(typeClass == null || parameters == null) throw new NullPointerException(); for(Type parameter : parameters) if(parameter == null) throw new NullPointerException(); } this.typeClass = typeClass; this.parameters = parameters; } @Override public TPred replace(TVar var, Type replacement) { for(int i=0;i vars) { for(Type parameter : parameters) parameter.collectFreeVars(vars); } @Override public void collectMetaVars(ArrayList vars) { for(Type parameter : parameters) parameter.collectMetaVars(vars); } @Override public void collectMetaVars(THashSet vars) { for(Type parameter : parameters) parameter.collectMetaVars(vars); } @Override public boolean contains(TMetaVar other) { for(Type parameter : parameters) if(parameter.contains(other)) return true; return false; } @Override public Type convertMetaVarsToVars() { for(int i=0;i vars) { for(Type parameter : parameters) parameter.collectEffectMetaVars(vars); } @Override public Type head() { throw new UnsupportedOperationException(); } @Override public Type copySkeleton(THashMap metaVarMap) { Type[] newParameters = new Type[parameters.length]; for(int i=0;i