@@ -2744,7 +2744,7 @@ after action (Stream step state) = Stream step' state
2744onException :: MonadCatch m => m b -> Stream m a -> Stream m a
2744onException :: MonadCatch m => m b -> Stream m a -> Stream m a
2745onException action str =
2745onException action str =
2746 gbracket (return ()) MC.try return
2746 gbracket (return ()) MC.try return
2747− (\_ (_ :: MC.SomeException) -> nilM $ action)
2747+ (\_ (e :: MC.SomeException) -> nilM (action >> MC.throwM e))
2748 (\_ -> str)
2748 (\_ -> str)
2750{-# INLINE_NORMAL _onException #-}
2750{-# INLINE_NORMAL _onException #-}
@@ -2772,7 +2772,8 @@ _onException action (Stream step state) = Stream step' state
2772{-# INLINE_NORMAL bracket #-}
2772{-# INLINE_NORMAL bracket #-}
2773bracket :: MonadCatch m => m b -> (b -> m c) -> (b -> Stream m a) -> Stream m a
2773bracket :: MonadCatch m => m b -> (b -> m c) -> (b -> Stream m a) -> Stream m a
2774bracket bef aft bet =
2774bracket bef aft bet =
2775+ gbracket bef MC.try aft
2775− gbracket bef MC.try aft (\a (_ :: SomeException) -> nilM $ aft a) bet
2776+ (\a (e :: SomeException) -> nilM (aft a >> MC.throwM e)) bet
2777data BracketState s v = BracketInit | BracketRun s v
2778data BracketState s v = BracketInit | BracketRun s v
@@ -2791,7 +2792,7 @@ _bracket bef aft bet = Stream step' BracketInit
2791 -- res <- step gst state `MC.onException` aft v
2792 -- res <- step gst state `MC.onException` aft v
2792 res <- MC.try $ step gst state
2793 res <- MC.try $ step gst state
2793 case res of
2794 case res of
2794− Left (_ :: SomeException) -> aft v >> return Stop
2795+ Left (e :: SomeException) -> aft v >> MC.throwM e >> return Stop
2795 Right r -> case r of
2796 Right r -> case r of
2796 Yield x s -> return $ Yield x (BracketRun (Stream step s) v)
2797 Yield x s -> return $ Yield x (BracketRun (Stream step s) v)
2797 Skip s -> return $ Skip (BracketRun (Stream step s) v)
2798 Skip s -> return $ Skip (BracketRun (Stream step s) v)