public ImmutableSplitResult(ImmutableCardSet top, ImmutableCardSet bottom)
 {
     top.ThrowIfNull(nameof(top));
     bottom.ThrowIfNull(nameof(bottom));
     Top = top;
     Bottom = bottom;
 }
 public ImmutableDrawSingleResult(ImmutableCardSet newDrawnFrom, Card drawn)
 {
     newDrawnFrom.ThrowIfNull(nameof(newDrawnFrom));
     drawn.ThrowIfNull(nameof(drawn));
     DrawnFrom = newDrawnFrom;
     Drawn = drawn;
 }
 public ImmutableDiscardResult(IEnumerable<Card> pile, IEnumerable<Card> discarded, IEnumerable<Card> notFound)
 {
     pile.ThrowIfNullOrContainsNulls(nameof(pile));
     discarded.ThrowIfNullOrContainsNulls(nameof(discarded));
     notFound.ThrowIfNullOrContainsNulls(nameof(notFound));
     Pile = new ImmutableCardSet(pile);
     Discarded = new ImmutableCardSet(discarded);
     NotFound = new ImmutableCardSet(notFound);
 }
        public ImmutableReplaceResult(
			IEnumerable<Card> newPile,
			IEnumerable<Card> replaced,
			IEnumerable<Card> notFound)
        {
            newPile.ThrowIfNullOrContainsNulls(nameof(newPile));
            replaced.ThrowIfNullOrContainsNulls(nameof(replaced));
            notFound.ThrowIfNullOrContainsNulls(nameof(notFound));
            Pile = new ImmutableCardSet(newPile);
            Replaced = new ImmutableCardSet(replaced);
            NotFound = new ImmutableCardSet(notFound);
        }