The question here is: is the given argument valid?

I am going to extrapolate a tiny bit. If you invoke, `Enum.max("foo")`, your code is also going to raise. So the lack of bang doesn't mean your code won't raise an exception.

That said, is an empty collection a valid argument for `Enum.max/1`? Not on its current version. But we could define it as: `Enum.max(collection, default // nil)`, where default is returned when the collection has no argument. What we should consider here is: how useful would such variants be?

There is one important factor to consider: In order to avoid calling `Enum.max/1` in an empty collection, people may want to use `Enum.empty?/1`. However, `Enum.empty?/1` may be expensive on such types as a Stream or a File.Stream and have a non-raising variant of `Enum.max/1` **is** desired.

When it comes to the implementation, I realized that there are two approaches we could follow:

1. Make it strict by default. So `Enum.max/1` would fail, unless `Enum.max/2` is called with a return value. In this case, there is no need for bangs;

2. Make it nil-able by default. So `Enum.max/1` returns nil with the returned value configurable via `Enum.max/2`. `Enum.max!/1` would always raise;

I am aware Elixir behaviour would tell us to choose 2. But I want us to think about the available options and their trade-offs before we continue.