--- /dev/null
+package org.simantics.scl.compiler.internal.deriving;\r
+\r
+import org.simantics.scl.compiler.internal.parsing.types.TApplyAst;\r
+import org.simantics.scl.compiler.internal.parsing.types.TTupleAst;\r
+import org.simantics.scl.compiler.internal.parsing.types.TVarAst;\r
+import org.simantics.scl.compiler.internal.parsing.types.TypeAst;\r
+\r
+class DerivingUtils {\r
+ \r
+ static TVarAst getHeadType(TypeAst typeAst) {\r
+ while(true) {\r
+ if(typeAst instanceof TApplyAst)\r
+ typeAst = ((TApplyAst)typeAst).function;\r
+ else if(typeAst instanceof TVarAst)\r
+ return (TVarAst)typeAst;\r
+ else if(typeAst instanceof TTupleAst) {\r
+ TTupleAst tuple = (TTupleAst)typeAst;\r
+ if(tuple.components.length == 1)\r
+ typeAst = tuple.components[0];\r
+ else\r
+ return null;\r
+ }\r
+ else\r
+ return null;\r
+ }\r
+ }\r
+ \r
+}\r