from functools import reduce from typing import Callable def combine[T](items: list[T], combine_fn: Callable[[T, T], T | None]) -> list[T]: def fold_fn(acc: list[T], item: T) -> list[T]: if not acc: return [item] combined = combine_fn(acc[-1], item) if combined is not None: return [*acc[:-1], combined] return [*acc, item] result = reduce(fold_fn, items, []) return result