/// <summary>
 /// Append the Right of one either to the Right of another
 /// For numeric values the behaviour is to sum the Rights (lhs + rhs)
 /// For string values the behaviour is to concatenate the strings
 /// For Lst/Stck/Que values the behaviour is to concatenate the lists
 /// For Map or Set values the behaviour is to merge the sets
 /// Otherwise if the R type derives from IAppendable then the behaviour
 /// is to call lhs.Append(rhs);
 /// </summary>
 /// <typeparam name="L">Left</typeparam>
 /// <typeparam name="R">Right</typeparam>
 /// <param name="lhs">Left-hand side of the operation</param>
 /// <param name="rhs">Right-hand side of the operation</param>
 /// <returns>lhs + rhs</returns>
 public static EitherUnsafe <L, R> append <L, R>(EitherUnsafe <L, R> lhs, EitherUnsafe <L, R> rhs) =>
 lhs.Append(rhs);