another way to implement Type TH.