{-# 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