added type family with GADT & type promotion