+ typeName
+ typeId
	private void genSeparatedConcat(		SeparatedListType type,		String typeId,		String typeName,		String elementTypeName) {		String decl =			typeName				+ " "				+ prefix				+ "concat"				+ typeId				+ "("				+ typeName				+ " arg0, "				+ buildListManyFormalArgsWithoutHeadAndTail(type)				+ typeName				+ " arg1)";		hprintln(decl + ";");		println(decl + " {");		println("  if (ATisEmpty((ATermList) arg0)) {");		println("    return arg1;");		println("  }");		// First we 'fake' a new list insertion using the first element of arg0 as a dummy value		println(			"  arg1 = "				+ prefix				+ "make"				+ typeName				+ "Many(("				+ elementTypeName				+ ")ATgetFirst((ATermList) arg0), "				+ buildListManyActualArgsWithoutHeadAndTail(type)				+ " arg1);");		// Then we remove the dummy value in type unsafe mode to get a list that starts with the expected separators		println("  arg1 = (" + typeName + ") ATgetNext((ATermList) arg1);");		// Now we can concatenate		println("  return (" + typeName + ") ATconcat((ATermList) arg0, (ATermList) arg1);");		println("}");	}