macro map(data, func) = (
result(for(data, appender, |b, i, x| merge(b, func(x))))
);
macro filter(data, func) = (
result(for(data, appender, |b, i, x| if(func(x), merge(b, x), b)))
);
macro flatten(data) = (
result(for(
data,
appender[?],
|b, i, x| for(x, b, |b2, i2, x2| merge(b2, x2))
))
);
macro sum(data) = (
result(for(
data,
merger[?,+],
|b,i,x| merge(b, x)
))
);
# Default comparator.
macro compare(e1, e2) = (
if(e1 > e2, 1, if(e1 < e2, -1, 0))
);