From: Donn Cave <donn@avvanta.com>

[I wrote initially, ...]

> As I have migrated more of my application into Haskell, I find that
> I/O in one thread effectively blocks other threads.

Resolved - the SSL_read external I/O function needs to be "safe".

If anyone is listening, I would very much like for there to be a mechanism by which external functions can be called "unsafe"-ly, but without blocking all other Haskell threads.  I have code that does this:

calcUpdate a b c = do
  expensiveComputation a b
  expensiveComputation a c

"expensiveComputation" mutates the second argument (b or c here), but does not call back into Haskell or update "a" and I would very much like to run these two in parallel, however it's not possible if "expensiveComputation" is unsafe.

If I make "expensiveComputation" safe, the extra time necessary for safe-ness outweighs the gains from parallelization for even reasonably-sized inputs (the expensiveComputation is called 100k's of times or more). My current plan is to handle the parallelization in C, but I'd prefer to do it in Haskell if possible.

John