Skip to content

Commit e4c8dcd

Browse files
committed
Stop ignoring exceptions in launchAff
`launchAff` will now throw exceptions rather than swallowing them. Fixes issue #32
1 parent bcd84de commit e4c8dcd

File tree

2 files changed

+9
-6
lines changed

2 files changed

+9
-6
lines changed

docs/Control.Monad.Aff.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,11 @@ will be run along side the computation's own canceler.
7979
#### `launchAff`
8080

8181
``` purescript
82-
launchAff :: forall e a. Aff e a -> Eff e Unit
82+
launchAff :: forall e a. Aff e a -> Eff (err :: EXCEPTION | e) Unit
8383
```
8484

8585
Converts the asynchronous computation into a synchronous one. All values
86-
and errors are ignored.
86+
are ignored, and if the computation produces an error, it is thrown.
8787

8888
#### `runAff`
8989

src/Control/Monad/Aff.purs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ module Control.Monad.Aff
2626
import Control.Monad.Cont.Class(MonadCont)
2727
import Control.Monad.Eff(Eff())
2828
import Control.Monad.Eff.Class(MonadEff, liftEff)
29-
import Control.Monad.Eff.Exception(Error(), EXCEPTION(), catchException, error)
29+
import Control.Monad.Eff.Exception(Error(), EXCEPTION(), catchException, throwException, error)
3030
import Control.Monad.Eff.Unsafe(unsafeInterleaveEff)
3131
import Control.Monad.Error.Class(MonadError, throwError)
3232
import Control.Monad.Rec.Class(MonadRec, tailRecM)
@@ -65,9 +65,12 @@ module Control.Monad.Aff
6565
cancelWith aff c = runFn3 _cancelWith nonCanceler aff c
6666

6767
-- | Converts the asynchronous computation into a synchronous one. All values
68-
-- | and errors are ignored.
69-
launchAff :: forall e a. Aff e a -> Eff e Unit
70-
launchAff = runAff (const (pure unit)) (const (pure unit))
68+
-- | are ignored, and if the computation produces an error, it is thrown.
69+
launchAff :: forall e a. Aff e a -> Eff (err :: EXCEPTION | e) Unit
70+
launchAff = runAff throwException (const (pure unit)) <<< liftEx
71+
where
72+
liftEx :: forall e a. Aff e a -> Aff (err :: EXCEPTION | e) a
73+
liftEx = _unsafeInterleaveAff
7174

7275
-- | Runs the asynchronous computation. You must supply an error callback and a
7376
-- | success callback.

0 commit comments

Comments
 (0)