> I agree with @alco that the "Raising behavior in this case is special casey and limiting".

`reduce/2` is a generalization of `max/2` so in that case `max` shouldn't raise as well. I really, really think we should raise for these functions. The solution you want would be `reduce/2` with a default value if the enum is empty, but that is exactly what `reduce/3 is.