public bool Equals(ImmutableTuple <T1, T2, T3, T4> x, ImmutableTuple <T1, T2, T3, T4> y)
 {
     return(EqualityComparer <T1> .Default.Equals(x.Item1, y.Item1) &&
            EqualityComparer <T2> .Default.Equals(x.Item2, y.Item2) &&
            EqualityComparer <T3> .Default.Equals(x.Item3, y.Item3) &&
            EqualityComparer <T4> .Default.Equals(x.Item4, y.Item4));
 }
 public int GetHashCode(ImmutableTuple <T1, T2> obj)
 {
     unchecked
     {
         return((EqualityComparer <T1> .Default.GetHashCode(obj.Item1) * 397) ^
                EqualityComparer <T2> .Default.GetHashCode(obj.Item2));
     }
 }
            public int GetHashCode(ImmutableTuple <T1, T2, T3> obj)
            {
                unchecked
                {
                    var hashCode = EqualityComparer <T1> .Default.GetHashCode(obj.Item1);

                    hashCode = (hashCode * 397) ^ EqualityComparer <T2> .Default.GetHashCode(obj.Item2);

                    hashCode = (hashCode * 397) ^ EqualityComparer <T3> .Default.GetHashCode(obj.Item3);

                    return(hashCode);
                }
            }
 public bool Equals(ImmutableTuple <T1, T2> x, ImmutableTuple <T1, T2> y)
 {
     return(EqualityComparer <T1> .Default.Equals(x.Item1, y.Item1) &&
            EqualityComparer <T2> .Default.Equals(x.Item2, y.Item2));
 }