doufo.tuple_type_compare: compare two types  
        if `types0` is 'bigger' than `types1`, return negative (<0);   
        otherwise, return positive (>0). Here 'bigger' is defined by   
        whether they are 'parent and child', or ituitively bigger    
    Args:  
        types0 (`type`): types0  
        types1 (`type`): types1  
    Returns:  
        return (`int`): comparison results  
    Raises:

def tuple_type_compare(types0, types1):
    """doufo.tuple_type_compare: compare two types  
        if `types0` is 'bigger' than `types1`, return negative (<0);   
        otherwise, return positive (>0). Here 'bigger' is defined by   
        whether they are 'parent and child', or ituitively bigger    
    Args:  
        types0 (`type`): types0  
        types1 (`type`): types1  
    Returns:  
        return (`int`): comparison results  
    Raises:
    """
    compares = [single_type_compare(types0[0], types1[0]),
                single_type_compare(types0[1], types1[1])]
    if compares[0] != 0:
        return compares[0]
    if compares[1] != 0:
        return compares[1]
    if types0[0] is types1[0] and types0[1] is types1[1]:
        return 0
    return hash(types1) - hash(types0)