0 | module IO.Async.Signal
 1 |
 2 | import IO.Async.Core
 3 | import IO.Async.Loop.SignalH
 4 | import IO.Async.Util
 5 |
 6 | %default total
 7 |
 8 | parameters {auto has : Has Errno es}
 9 |            {auto sig : SignalH e}
10 |
11 |   export
12 |   awaitSignals : List Signal -> Async e es Siginfo
13 |   awaitSignals s = do
14 |     ev <- env
15 |     primAsync $ \cb => primOnSignals ev s $ \case
16 |       Right si => cb (Right si)
17 |       Left x   => cb (Left $ inject x)
18 |
19 |   export %inline
20 |   onSignals : List Signal -> Async e es a -> Async e es a
21 |   onSignals s act = ignore (awaitSignals s) >> act
22 |
23 |   export %inline
24 |   onSignal : Signal -> Async e es a -> Async e es a
25 |   onSignal = onSignals . pure
26 |