protected virtual TResult DefaultVisitEdge(Edge x) => default;
protected override object DefaultVisitEdge(Edge x) => throw new InvalidOperationException();
/// <summary>Visits given edge.</summary> protected TResult Accept(Edge x) => (x != null) ? x.Accept(this) : default;