I don't like the exception here. There is no `!` in the name.

If you call `reduce/3` with an empty list, it returns the second argument. Using `nil` as the default for `reduce/2` would be in line with other Enum functions and Elixir conventions in general.

```
iex> Enum.first []
nil
iex> Enum.find [], fn x -> x end
nil
```

BTW, `Enum.find` is similar to where you want `reduce` to be -- it has an optional second argument which is `nil` by default.