> forkChild :: IO () -> IO (MVar ())
> forkChild p = do
>     mvar <- newEmptyMVar
>     forkIO (p >> putMVar mvar ())
>     return mvar

A slightly better version:

> import Exception
>
> forkChild :: IO () -> IO (MVar ())
> forkChild p = do
>     mvar <- newEmptyMVar
>     forkIO (p `finally` putMVar mvar ())
>     return mvar

which catches exceptions as well as clean exits from the forked thread. 

Cheers,
        Simon

Reply via email to