[Haskell-cafe] derivation of mapP, a parallel, lazy map

Dan Weston westondan at imageworks.com
Mon Feb 25 17:46:38 EST 2008


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 at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
> 
> 




More information about the Haskell-Cafe mailing list