using System; public interface ICovariantTuple { T1 Head { get; } T2 Tail { get; } } public class CovariantTuple : Tuple, ICovariantTuple { public CovariantTuple(T1 head, T2 tail) : base(head, tail) { } public T1 Head => this.Item1; public T2 Tail => this.Item2; } public class CovariantTuple { public static ICovariantTuple Create(T1 head, T2 tail) => new CovariantTuple(head, tail); }