{
if (elementAt instanceof OtpErlangTuple)
{// multi-arg constructor, turn elements of the tuple into arguments for the constructor.
OtpErlangTuple argTuple = (OtpErlangTuple)elementAt;
if (argTuple.arity() < 2) throw new IllegalArgumentException("invalid type argument: a list with arity of less than two");
final int argumentNumber = argTuple.arity()-1;
Class<OtpErlangList> []argTypes = new Class[argumentNumber];
for(int i=0;i<argumentNumber;++i) argTypes[i]=OtpErlangList.class;
@SuppressWarnings("unchecked")
Class<Signature> sigClass = (Class<Signature>)Class.forName("statechum.analysis.Erlang.Signatures."+((OtpErlangAtom)argTuple.elementAt(0)).atomValue()+"Signature");
Constructor<Signature> constructor = sigClass.getConstructor(argTypes);