public Cardinality(int minimum, Maybe<int> maximum)
        {
            if (minimum < 0)
                throw new ArgumentOutOfRangeException("minimum", "Start of range must be a positive number.");

            Minimum = minimum;
            Maximum = maximum
                .ThrowOn(x => x.Select(y => y == 0 || y < minimum
                    ? new ArgumentOutOfRangeException("end", "End must be not be zero and greater than or equal to start.")
                    : null).ValueOrDefault())
                .Run();
        }