complex types: [type] and type1|type2