threads-0.3.1: Mask.hs
{-# LANGUAGE CPP, NoImplicitPrelude, UnicodeSyntax #-}
module Mask ( mask ) where
#if MIN_VERSION_base(4,3,0)
import Control.Exception ( mask )
#else
import Control.Monad ( (>>=) )
import Control.Exception ( blocked, block, unblock )
import Data.Function ( ($), id )
import System.IO ( IO )
mask ∷ ((IO α → IO α) → IO β) → IO β
mask io = blocked >>= \b → if b then io id else block $ io unblock
#endif