Chris Kuklewicz wrote:

> forkInheritIO :: IO () -> IO ThreadId -- inherits parent's
> block or unblock status
>
> forkBlockedIO :: IO () -> IO ThreadId -- starts the action in
> "block" mode.  Must manually "unblock"
>

Either of these is certainly possible, and I agree that forkBlockedIO is more 
general than my forkCatchIO.

One tantalising possibility is that we could make forkIO have the forkInheritIO 
behaviourthe default without breaking much code

> where forkBlockedIO could be written as "block . forkInheritIO"
> and forkIO is "unblock . forkInheritIO"
> but there is no way to write forkInheritIO since I can't query
> the current block|unblock status dynamically.  I have no use
> for forkInheritIO but
> perhaps some library code would want to play nice with the
> calling application.
>
> If either of those two functions existed then one could write
> "forkCatchIO" (which is unblocked) using it:
>
> forkCatchBlockedIO hander io = forkBlockedIO (handle handler io)
> forkCatchIO handler = (forkChatchBlockedIO handler) . unblock
>
> I propose adding at least "forkInheritIO" or "forkBlockedIO"
> as a primitive
> and perhaps "forkCatchIO" or "forkCatchBlockedIO" as a
> primitive if there is a performance gain.
>
> Cheers,
>   Chris

_______________________________________________
Haskell mailing list
Haskell@haskell.org
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to