Skip to content
  • Simon Marlow's avatar
    New asynchronous exception control API (base parts) · 73157075
    Simon Marlow authored
      
    As discussed on the libraries/haskell-cafe mailing lists
      http://www.haskell.org/pipermail/libraries/2010-April/013420.html
    
    This is a replacement for block/unblock in the asychronous exceptions
    API to fix a problem whereby a function could unblock asynchronous
    exceptions even if called within a blocked context.
    
    The new terminology is "mask" rather than "block" (to avoid confusion
    due to overloaded meanings of the latter).
    
    The following is the new API; the old API is deprecated but still
    available for the time being.
    
    Control.Exception
    -----------------
    
    mask  :: ((forall a. IO a -> IO a) -> IO b) -> IO b
    mask_ :: IO a -> IO a
    
    uninterruptibleMask :: ((forall a. IO a -> IO a) -> IO b) -> IO b
    uninterruptibleMask_ :: IO a -> IO 
    
    getMaskingState :: IO MaskingState
    
    data MaskingState
      = Unmasked
      | MaskedInterruptible 
      | MaskedUninterruptible
    
    
    Control.Concurrent
    ------------------
    
    forkIOUnmasked :: IO () -> IO ThreadId
    73157075