Maybe we should call it `createStreamListener`?