Thanks to [head ~ tail] in DataWeave 2.0 we can easily create infinite sequence generators.

In this case we are implementing the Leibniz’s series to calculate an approximation of PI.

/**
* This function returns a stream. We first populate the stream with a
* head value, and a lazy tail.
* In this case, we tell the engine the tail is a function call.
* That function call will be not be executed UNTIL the value of that
* call is needed.
*/
fun leibnizTerm(n: Number = 0): Array<Number> =
[4 / (n + 1) - 4 / (n + 3) ~ leibnizTerm(n + 4)]
// ^^^^^^^^^^^^^^^^^^^^^^^^^   ^^^^^^^^^^^^^^^^^^

/**
* Now we have the sequence generator, the only thing left is select
* the values and aggregate them. We are going to pick a slice of the
* infinite sequence of leibnizTerm using a range selector.
*/
fun pi(terms: Number = 1E4): Number = do {
var seriesSubset = leibnizTerm()[0 to terms]
//                 ^^^^^^^^^^^  ^^^^^^^^^^^^
//                 series gen   range selector
---
sum( seriesSubset )
}

---
// Then executing
pi(1E4)
// Outputs: 3.1415426585893202