t = make.Subsequence( s.pos, ts );
{ t = pN.flattenSubsequence( make.Subsequence( s.pos, ts ) ); t = pN.elimSubsequence( t ); }
    Tree simplePattern() {	switch (s.token) {	case COMMA:	    return make.Subsequence( s.pos, Tree.EMPTY_ARRAY ); // ((nothing))	case IDENTIFIER:	    if( s.name == BAR ) 		{		    return make.Subsequence( s.pos, Tree.EMPTY_ARRAY ); // ((nothing))		}	    // else fall through to case THIS	case THIS:	    Tree t = stableId();	    switch( t ) {	    case Ident( Name name ):		if(( name.isVariable() )&&( s.token == AT )) 		    {       			int pos = s.pos;			s.nextToken();			return make.Bind( pos, name, simplePattern() );		    }	    }	    while (s.token == LPAREN) {		t = make.Apply(s.pos, convertToTypeId(t), argumentPatterns());	    }	    return t;	case USCORE:	    return make.Ident(s.skipToken(), Names.WILDCARD);	case CHARLIT:	case INTLIT:	case LONGLIT:	case FLOATLIT:	case DOUBLELIT:	case STRINGLIT:	case SYMBOLLIT:	case TRUE:	case FALSE:	case NULL:	    return literal(true);	case LPAREN:	    int p = s.pos;	    s.nextToken();	    Tree[] ts = patterns();	    Tree   t;	    if( ts.length == 1 )		t = ts[ 0 ];	    else		t = make.Subsequence( s.pos, ts );	    accept(RPAREN);	    return t;	default:	    return syntaxError("illegal start of pattern", true);	}	        }