<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def repeat_func(func: Callable[[], Union[T, Awaitable[T]]], times: int=None, *, interval: float=0) -> AsyncIterator[T]: """ Repeats the result of a 0-ary function either indefinitely, or for a defined number of times. `times` and `interval` behave exactly like with `aiostream.create.repeat`. A useful idiom is to combine an indefinite `repeat_func` stream with `aiostream.select.takewhile` to terminate the stream at some point. """

    base = stream.repeat.raw((), times, interval=interval)
    return cast(AsyncIterator[T], stream.starmap.raw(base, func, task_limit=1))