# Folds

Folds are a weird concept to grasp at first. Yet, it is not exclusive to PureScript but also present in other, functional programming languages. What folds do is, what their name suggests - they fold data together. Indeed, there are some similarities to the reduce-function, for example.

Make sure to import:

import Data.Foldable

There are two basic folds: foldr which stands for "fold from the right", and foldl which stands for "fold from the left".

foldl (+) 0 [1, 2, 3]-- 6foldr (+) 0 [1, 2, 3]-- 6

No matter the direction, both fold-functions sum up the values of the array. We can provide other operations than just addition:

foldl (*) 0 [1, 2, 3, 4]-- 0

But why does multiplying all the values with each other lead to "0" as a result? Because of the "0" we provide after the operator. It can be thought of as an accumulator, accumulating a result after we traversed the array.

Let's improve that to multiply all the values with each other:

foldl (*) 1 [1, 2, 3, 4]-- 24

Or, to double the output:

foldl (*) 2 [1, 2, 3, 4]-- 48