
According to Lennart Augustsson (http://haskell.org/pipermail/haskell-cafe/2007-July/029603.html) you can have uninterruptible threads in ghc. If a thread never allocates it will never be preempted. So I wonder if what you are proposing really is unsafe because by the time (take 1) is even invoked you might not regain control of the CPU being held hostage by parBuffer trying to evaluate undefined. After all, undefined can encompass non-halting calculations as well as abortive ones. In other words, undefined is not an exception (despite the error message). Converting it to a catchable exception is tantamount to pretending that the threading model is fully preemptive. Dan Roberto Zunino wrote:
Felipe Lessa wrote:
Have you seen parBuffer? I'd also recommend looking at its source.
I wonder if it would be possible to make a variant of parBuffer so that the following evaluates to 1:
take 1 $ parBuffer 10 r0 (1:2:3:undefined) *** Exception: Prelude.undefined
Maybe we should use a more complex intermediate structure as
data ExcList a = Nil | Cons a (ExcList a) | Deferred Exception
and catch the exception through some unsafe stuff? Would that be a good idea?
Zun. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe