scanLeft<T, B> function

ImmutableList<B> Function(ImmutableList<T>) Function(B combine(B, T)) scanLeft<T, B>(
  1. B initial
)

Scans a list from the left, producing a new list with intermediate results.

Example:

final list = ImmutableList<int>([1, 2, 3]);
final scanResult = scanLeft<int, int>(0)((acc, item) => acc + item)(list);
print(scanResult.items);  // Outputs: (0, 1, 3, 6)

Implementation

ImmutableList<B> Function(ImmutableList<T>) Function(B Function(B, T) combine)
    scanLeft<T, B>(B initial) {
  return (B Function(B, T) combine) {
    return (ImmutableList<T> list) {
      List<B> results = [initial];
      B accumulator = initial;

      for (T item in list.items) {
        accumulator = combine(accumulator, item);
        results.add(accumulator);
      }

      return ImmutableList(results);
    };
  };
}