1 package org.simantics.scl.compiler.elaboration.modules;
3 import org.simantics.scl.compiler.constants.Constant;
4 import org.simantics.scl.compiler.elaboration.errors.ElabNode;
5 import org.simantics.scl.compiler.types.TPred;
6 import org.simantics.scl.compiler.types.TVar;
8 import gnu.trove.map.hash.THashMap;
10 public class TypeClassInstance extends ElabNode {
11 public final TypeClass typeClass;
12 public final TPred[] context;
13 public final TPred instance;
14 public final THashMap<String, MethodImplementation> methodImplementations;
15 public final Constant generator;
16 public final TVar[] generatorParameters;
17 public final String javaName;
18 public SCLValue[] superExpressions;
20 public TypeClassInstance(long loc, TypeClass typeClass,
22 TVar[] generatorParameters, TPred[] context, TPred instance,
23 THashMap<String, MethodImplementation> methodImplementations,
26 this.typeClass = typeClass;
27 this.generator = generator;
28 this.generatorParameters = generatorParameters;
29 this.context = context;
30 this.instance = instance;
31 this.methodImplementations = methodImplementations;
32 this.javaName = javaName;
36 public void toString(final StringBuilder b) {
37 final TypeUnparsingContext tuc = new TypeUnparsingContext();
38 b.append("instance (");
39 for(int i=0;i<context.length;++i) {
42 context[i].toString(tuc);
46 b.append(instance.toString(tuc));
48 methodImplementations.forEachEntry(new TObjectObjectProcedure<String, Name>() {
50 public boolean execute(String name, Name functionName) {
54 b.append(functionName);