module Sound.Sox.System where

import qualified System.Posix.Signals as Signals
import Control.Exception (bracket, )

{- |
Disable sigPIPE for a local action.
If we don't call this, GHCi quits,
when the playing command is aborted with CTRL-C.
Unfortunately there doesn't seem to be another way of doing this.
-}
catchCtrlC :: IO ()
catchCtrlC :: IO ()
catchCtrlC =
   Signal -> Handler -> Maybe SignalSet -> IO Handler
Signals.installHandler Signal
Signals.sigPIPE
      Handler
Signals.Ignore forall a. Maybe a
Nothing
    forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall (m :: * -> *) a. Monad m => a -> m a
return ()


{-
This won't help in GHCi,
since the old handler will terminate GHCi
as soon as it is installed, again.
-}
ignoreCtrlC :: IO a -> IO a
ignoreCtrlC :: forall a. IO a -> IO a
ignoreCtrlC IO a
act =
   forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket
      (Signal -> Handler -> Maybe SignalSet -> IO Handler
Signals.installHandler Signal
Signals.sigPIPE Handler
Signals.Ignore forall a. Maybe a
Nothing)
      (\Handler
handler ->
          Signal -> Handler -> Maybe SignalSet -> IO Handler
Signals.installHandler Signal
Signals.sigPIPE Handler
handler forall a. Maybe a
Nothing)
      (forall a b. a -> b -> a
const IO a
act)