@@ -32,7 +32,7 @@ import Control.Monad
3232import Control.Monad.Writer
3333import Control.Monad.Error.Class (MonadError(..))
3434import Control.Monad.Trans.State.Lazy
35−import Control.Arrow(first)
35+import Control.Arrow (first)
3636
3737import Language.PureScript.Crash
3838import Language.PureScript.AST
@@ -938,20 +938,18 @@ renderBox = unlines . map trimEnd . lines . Box.render
938938 where
939939 trimEnd = reverse . dropWhile (== ' ') . reverse
940940
941−-- |
942−-- Interpret multiple errors and warnings in a monad supporting errors and warnings
943−--
944−interpretMultipleErrorsAndWarnings :: (MonadError MultipleErrors m, MonadWriter MultipleErrors m) => (Either MultipleErrors a, MultipleErrors) -> m a
945−interpretMultipleErrorsAndWarnings (err, ws) = do
946− tell ws
947− either throwError return err
948−
949941-- |
950942-- Rethrow an error with a more detailed error message in the case of failure
951943--
952944rethrow :: (MonadError e m) => (e -> e) -> m a -> m a
953945rethrow f = flip catchError $ \e -> throwError (f e)
954946
947+reifyErrors :: (MonadError e m) => m a -> m (Either e a)
948+reifyErrors ma = catchError (fmap Right ma) (return . Left)
949+
950+reflectErrors :: (MonadError e m) => m (Either e a) -> m a
951+reflectErrors ma = ma >>= either throwError return
952+
955953warnAndRethrow :: (MonadError e m, MonadWriter e m) => (e -> e) -> m a -> m a
956954warnAndRethrow f = rethrow f . censor f
957955