use generic sub-typing for omit & pick