public class Pair { public T fst; public T snd; } public class RList { public class Nil : RList {} public class Zero : RList { public RList > arg; } static int _Length (RList xs) { if (xs is Zero) return RList >._Length (((Zero)xs).arg); else return 0; } public int Length { get { return _Length (this); } } } class M { public static void Main() { int x = (new RList.Nil()).Length; } }