Do we want/need to specialize this?
mapFuture == flatMap(t => FutureProducer(f(t))?