return q.type.isSameAs( this.type ); } return false; case SequencePat(_, int plen): switch (q) { case SequencePat(_, int qlen): return (plen == qlen) && q.type.isSameAs( this.type ); } return false; default: return subsumes( q );
switch (q) { case ConstrPat(_): return q.type.isSameAs(this.type); } return false; case SequencePat(_, int plen): switch (q) { case SequencePat(_, int qlen): return (plen == qlen) && q.type.isSameAs(this.type); } return false; default: return subsumes(q);
    public final boolean isSameAs( PatternNode q ) {        switch( this ) {        case ConstrPat(_):            switch (q) {            case ConstrPat(_):                return q.type.isSameAs( this.type );            }            return false;        case SequencePat(_, int plen):            switch (q) {            case SequencePat(_, int qlen):                return (plen == qlen) && q.type.isSameAs( this.type );            }            return false;        default:            return subsumes( q );        }    }