use typedef to define block