public override bool Equals(object obj)
{
if (obj == null)
return false;
if (!(obj is List))
return false;
var list0 = this;
var list = (List)obj;
while (true)
{
if (list == null)
return false;
if (!Machine.AreEqual(list0.Head, list.Head))
return false;
if (!(list0.Tail is List))
return Machine.AreEqual(list0.Tail, list.Tail);
list0 = (List)list0.Tail;
list = (List)list.Tail;
}
}