def get_specialized_types(type):
 assert type.is_fused
 if isinstance(type, FusedType):
  result = list(type.types)
  for specialized_type in result:
   specialized_type.specialization_string = specialized_type.typeof_name()
 else:
  result = []
  for (cname, f2s) in get_all_specialized_permutations(type.get_fused_types()):
   specialized_type = type.specialize(f2s)
   specialized_type.specialization_string = specialization_signature_string(type, f2s)
   result.append(specialized_type)
 return result

def get_specialized_types ( type ) : assert type . is_fused if isinstance ( type , FusedType ) : result = list ( type . types ) for specialized_type in result : specialized_type . specialization_string = specialized_type . typeof_name ( ) else : result = [ ] for ( cname , f2s ) in get_all_specialized_permutations ( type . get_fused_types ( ) ) : specialized_type = type . specialize ( f2s ) specialized_type . specialization_string = specialization_signature_string ( type , f2s ) result . append ( specialized_type ) return result
return a list of specialized types in their declared order .