implement pat_type