Reducer[R; T] = (R, T) -> R
proc run[R; T](self: Reducer[R, T]; reduction: R; item: T): R
func map[R; T](self: Reducer[R, T]; f: R -> R): Reducer[R, T]