@@ -32,7 +32,7 @@ import Control.Monad
32import Control.Monad.Writer
32import Control.Monad.Writer
33import Control.Monad.Error.Class (MonadError(..))
33import Control.Monad.Error.Class (MonadError(..))
34import Control.Monad.Trans.State.Lazy
34import Control.Monad.Trans.State.Lazy
35−import Control.Arrow(first)
35+import Control.Arrow (first)
37import Language.PureScript.Crash
37import Language.PureScript.Crash
38import Language.PureScript.AST
38import Language.PureScript.AST
@@ -938,20 +938,18 @@ renderBox = unlines . map trimEnd . lines . Box.render
939 trimEnd = reverse . dropWhile (== ' ') . reverse
939 trimEnd = reverse . dropWhile (== ' ') . reverse
942−-- Interpret multiple errors and warnings in a monad supporting errors and warnings
944−interpretMultipleErrorsAndWarnings :: (MonadError MultipleErrors m, MonadWriter MultipleErrors m) => (Either MultipleErrors a, MultipleErrors) -> m a
945−interpretMultipleErrorsAndWarnings (err, ws) = do
947− either throwError return err
950-- Rethrow an error with a more detailed error message in the case of failure
942-- Rethrow an error with a more detailed error message in the case of failure
952rethrow :: (MonadError e m) => (e -> e) -> m a -> m a
944rethrow :: (MonadError e m) => (e -> e) -> m a -> m a
953rethrow f = flip catchError $ \e -> throwError (f e)
945rethrow f = flip catchError $ \e -> throwError (f e)
947+reifyErrors :: (Functor m, MonadError e m) => m a -> m (Either e a)
948+reifyErrors ma = catchError (fmap Right ma) (return . Left)
950+reflectErrors :: (MonadError e m) => m (Either e a) -> m a
951+reflectErrors ma = ma >>= either throwError return
955warnAndRethrow :: (MonadError e m, MonadWriter e m) => (e -> e) -> m a -> m a
953warnAndRethrow :: (MonadError e m, MonadWriter e m) => (e -> e) -> m a -> m a
956warnAndRethrow f = rethrow f . censor f
954warnAndRethrow f = rethrow f . censor f