apply context type parameters to return type while matching to support GADT