Current implementation limitations:
- requires a
Bimonad instead of just a Monad. I'm not sure if this is negotiable or not. It seems like we need to call F.extract on the iteratee to get it to "run".
- Uses promises for communication between producer and consumer. Maybe this is okay for, say, and Play converter. But there has to be a more catsy way to do this. Right now, my cat-fu is not strong enough to pull it off. Maybe in the future, I will figure it out. But if you are good with this kind of thing and want to take a stab at it, that would be great.
- Steals a
Future from the global execution context to kick off the producer asynchronously. A more catsy approach, as described in the last bullet point, should do away with this. I didn't want to add an implicit ExecutionContext argument here, as that seems like an implementation detail, and a rewrite of this method without it would not be backwards compatible. Maybe there is some way to pull this off with Task? I tried, couldn't figure it out
Current implementation limitations:
Bimonadinstead of just aMonad. I'm not sure if this is negotiable or not. It seems like we need to callF.extracton the iteratee to get it to "run".Futurefrom the global execution context to kick off the producer asynchronously. A more catsy approach, as described in the last bullet point, should do away with this. I didn't want to add an implicitExecutionContextargument here, as that seems like an implementation detail, and a rewrite of this method without it would not be backwards compatible. Maybe there is some way to pull this off withTask? I tried, couldn't figure it out