from typing import Callable


def compute_rolling_aggregate(
        values: list[float], aggregation_fn: Callable[[list[float]], float], window_size: int
) -> list[float]:
    """
    Compute rolling aggregate.

    :param values:
        list of values to be aggregated
    :param aggregation_fn:
        aggregation function
    :param window_size:
        size of rolling window
    :return:
        list of rolling aggregates
    """
    window = []
    results = []
    for value in values:
        if len(window) == window_size:
            window.pop(0)
        window.append(value)
        results.append(aggregation_fn(window))
    return results