code: function reduce(f) {
      return function(initial) {
        return function(foldable) {
          return Z.reduce (function(y, x) { return f (y) (x); },
                           initial,
                           foldable);
        };
      };
    }
docs: # reduce :: Foldable f => (b -> a -> b) -> b -> f a -> b . . Takes a curried binary function, an initial value, and a [Foldable][], . and applies the function to the initial value and the Foldable's first . value, then applies the function to the result of the previous . application and the Foldable's second value. Repeats this process . until each of the Foldable's values has been used. Returns the initial . value if the Foldable is empty; the result of the final application . otherwise. . . ```javascript . > S.reduce (S.add) (0) ([1, 2, 3, 4, 5]) . 15 . . > S.reduce (xs => x => S.prepend (x) (xs)) ([]) ([1, 2, 3, 4, 5]) . [5, 4, 3, 2, 1] . ```