module Effectful.Posix.Signals.Handler
( Handler (..),
mapHandler,
handlerToPosix,
handlerFromPosix,
)
where
import System.Posix.Signals (SignalInfo)
import System.Posix.Signals qualified as Signals
data Handler m
= Default
| Ignore
| Catch (m ())
| CatchOnce (m ())
| CatchInfo (SignalInfo -> m ())
| CatchInfoOnce (SignalInfo -> m ())
mapHandler :: (forall x. m x -> n x) -> Handler m -> Handler n
mapHandler :: forall (m :: * -> *) (n :: * -> *).
(forall x. m x -> n x) -> Handler m -> Handler n
mapHandler forall x. m x -> n x
f = \case
Handler m
Default -> Handler n
forall (m :: * -> *). Handler m
Default
Handler m
Ignore -> Handler n
forall (m :: * -> *). Handler m
Ignore
Catch m ()
x -> n () -> Handler n
forall (m :: * -> *). m () -> Handler m
Catch (n () -> Handler n) -> n () -> Handler n
forall a b. (a -> b) -> a -> b
$ m () -> n ()
forall x. m x -> n x
f m ()
x
CatchOnce m ()
x -> n () -> Handler n
forall (m :: * -> *). m () -> Handler m
CatchOnce (n () -> Handler n) -> n () -> Handler n
forall a b. (a -> b) -> a -> b
$ m () -> n ()
forall x. m x -> n x
f m ()
x
CatchInfo SignalInfo -> m ()
x -> (SignalInfo -> n ()) -> Handler n
forall (m :: * -> *). (SignalInfo -> m ()) -> Handler m
CatchInfo ((SignalInfo -> n ()) -> Handler n)
-> (SignalInfo -> n ()) -> Handler n
forall a b. (a -> b) -> a -> b
$ m () -> n ()
forall x. m x -> n x
f (m () -> n ()) -> (SignalInfo -> m ()) -> SignalInfo -> n ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SignalInfo -> m ()
x
CatchInfoOnce SignalInfo -> m ()
x -> (SignalInfo -> n ()) -> Handler n
forall (m :: * -> *). (SignalInfo -> m ()) -> Handler m
CatchInfoOnce ((SignalInfo -> n ()) -> Handler n)
-> (SignalInfo -> n ()) -> Handler n
forall a b. (a -> b) -> a -> b
$ m () -> n ()
forall x. m x -> n x
f (m () -> n ()) -> (SignalInfo -> m ()) -> SignalInfo -> n ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SignalInfo -> m ()
x
handlerToPosix :: Handler IO -> Signals.Handler
handlerToPosix :: Handler IO -> Handler
handlerToPosix = \case
Handler IO
Default -> Handler
Signals.Default
Handler IO
Ignore -> Handler
Signals.Ignore
Catch IO ()
x -> IO () -> Handler
Signals.Catch IO ()
x
CatchOnce IO ()
x -> IO () -> Handler
Signals.CatchOnce IO ()
x
CatchInfo SignalInfo -> IO ()
x -> (SignalInfo -> IO ()) -> Handler
Signals.CatchInfo SignalInfo -> IO ()
x
CatchInfoOnce SignalInfo -> IO ()
x -> (SignalInfo -> IO ()) -> Handler
Signals.CatchInfoOnce SignalInfo -> IO ()
x
handlerFromPosix :: Signals.Handler -> Handler IO
handlerFromPosix :: Handler -> Handler IO
handlerFromPosix = \case
Handler
Signals.Default -> Handler IO
forall (m :: * -> *). Handler m
Default
Handler
Signals.Ignore -> Handler IO
forall (m :: * -> *). Handler m
Ignore
Signals.Catch IO ()
x -> IO () -> Handler IO
forall (m :: * -> *). m () -> Handler m
Catch IO ()
x
Signals.CatchOnce IO ()
x -> IO () -> Handler IO
forall (m :: * -> *). m () -> Handler m
CatchOnce IO ()
x
Signals.CatchInfo SignalInfo -> IO ()
x -> (SignalInfo -> IO ()) -> Handler IO
forall (m :: * -> *). (SignalInfo -> m ()) -> Handler m
CatchInfo SignalInfo -> IO ()
x
Signals.CatchInfoOnce SignalInfo -> IO ()
x -> (SignalInfo -> IO ()) -> Handler IO
forall (m :: * -> *). (SignalInfo -> m ()) -> Handler m
CatchInfoOnce SignalInfo -> IO ()
x