def scanl1(f: Callable[[T, T], T], xs: Iterable[T]) -> Iterator[T]:
    """ Make an iterator that returns accumulated results of a binary function
    applied to elements of an iterable.

    .. math::
        scanl1(f, [x_0, x_1, x_2, ...]) = [x_0, f(x_0, x_1), f(f(x_0, x_1), x_2), ...]

    Parameters
    ----------
    f
        A binary function of two arguments of type T.
    xs
        An iterable of elements of type T. 

    Returns
    -------
    Iterator
        The iterator of accumulated results.


    Examples
    --------
    >>> from delphi.utils.fp import scanl1
    >>> list(scanl1(lambda x, y: x + y, range(5)))
    [0, 1, 3, 6, 10]

    """
    return accumulate(xs, f)
Make an iterator that returns accumulated results of a binary function
    applied to elements of an iterable.

    .. math::
        scanl1(f, [x_0, x_1, x_2, ...]) = [x_0, f(x_0, x_1), f(f(x_0, x_1), x_2), ...]

    Parameters
    ----------
    f
        A binary function of two arguments of type T.
    xs
        An iterable of elements of type T. 

    Returns
    -------
    Iterator
        The iterator of accumulated results.


    Examples
    --------
    >>> from delphi.utils.fp import scanl1
    >>> list(scanl1(lambda x, y: x + y, range(5)))
    [0, 1, 3, 6, 10]