Why does fold have the following type in Scala?

Viewed 2271

I was looking at the way fold is defined for immutable.Set:

def fold [A1 >: A] (z: A1)(op: (A1, A1) ⇒ A1): A1 

yet foldLeft is defined as:

def foldLeft [B] (z: B)(op: (B, A) ⇒ B): B 

This looks weird for me, at least at first glance, since I was expecting fold to be able to change the type of the collection it returned, much like foldLeft does.

I imagine this is because foldLeft and foldRight guarantee something about the order in which the elements are folded. What is the guarantee given by fold?

2 Answers
Related