packages feed

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