Take an initial segment of a monadic lazy list,
stopping when there is less than
percent of the remaining allowed heartbeats.
0, then this passes through the original list unmodified.
initial heartbeat counter is recorded when the first element of the list is requested.
Then each time an element is requested from the wrapped list the heartbeat counter is checked, and
current * 100 / initial < percent then that element is returned,
but no further elements.