import org.simantics.scl.compiler.elaboration.expressions.ELiteral;
import org.simantics.scl.compiler.elaboration.expressions.EVar;
import org.simantics.scl.compiler.elaboration.expressions.Expression;
+import org.simantics.scl.compiler.elaboration.modules.TypeAlias;
import org.simantics.scl.compiler.elaboration.modules.TypeConstructor;
+import org.simantics.scl.compiler.elaboration.modules.TypeDescriptor;
import org.simantics.scl.compiler.environment.AmbiguousNameException;
import org.simantics.scl.compiler.environment.Environment;
import org.simantics.scl.compiler.environment.Environments;
}
TCon con;
try {
- con = Environments.getTypeConstructorName(environment, headType.name);
+ con = Environments.getTypeDescriptorName(environment, headType.name);
} catch (AmbiguousNameException e1) {
errorLog.log(headType.location, e1.getMessage());
return;
errorLog.log(headType.location, "Couldn't resolve " + headType.name);
return;
}
- TypeConstructor tcon = environment.getTypeConstructor(con);
- if(tcon == null) {
+ TypeDescriptor tdesc = environment.getTypeDescriptor(con);
+ if(tdesc == null) {
errorLog.log(headType.location, "Didn't find type constructor for " + headType.name);
return;
}
+ if(tdesc instanceof TypeAlias) {
+ errorLog.log(headType.location, "Cannot derive instance for a type alias.");
+ return;
+ }
+ TypeConstructor tcon = (TypeConstructor)tdesc;
if(tcon.isOpen) {
errorLog.log(headType.location, "Cannot derive instance for open data types.");
return;