I have learned the basic difference between `foldLeft` and `reduceLeft`

**foldLeft:**

* initial value has to be passed

**reduceLeft:**

* takes first element of the collection as initial value
* throws exception if collection is empty

Is there any other difference ?

Any specific reason to have two methods with similar functionality?