@@ -39,7 +39,6 @@ module Text.Pandoc.Class ( PandocMonad(..)
3939 , addWarningWithPos
4040 , PandocIO(..)
4141 , PandocPure(..)
42− , PandocExecutionError(..)
4342 , FileInfo(..)
4443 , runIO
4544 , runIOorExplode
@@ -83,12 +82,12 @@ import Control.Monad.State hiding (fail)
8382import Control.Monad.Reader hiding (fail)
8483import Control.Monad.Except hiding (fail)
8584import Data.Word (Word8)
86−import Data.Typeable
8785import Data.Default
8886import System.IO.Error
8987import qualified Data.Map as M
88+import Text.Pandoc.Error
9089
91−class (Functor m, Applicative m, Monad m, MonadError PandocExecutionError m) => PandocMonad m where
90+class (Functor m, Applicative m, Monad m, MonadError PandocError m) => PandocMonad m where
9291 lookupEnv :: String -> m (Maybe String)
9392 getCurrentTime :: m UTCTime
9493 getCurrentTimeZone :: m TimeZone
@@ -143,12 +142,6 @@ addWarningWithPos mbpos msg =
143142 warn $
144143 msg ++ maybe "" (\pos -> " " ++ show pos) mbpos
145144
146−-- We can add to this as we go
147−data PandocExecutionError = PandocFileReadError FilePath
148− | PandocShouldNeverHappenError String
149− | PandocParseError String
150− | PandocSomeError String
151− deriving (Show, Typeable)
152145
153146-- Nothing in this for now, but let's put it there anyway.
154147data PandocStateIO = PandocStateIO { ioStWarnings :: [String]
@@ -168,35 +161,35 @@ instance Default PandocEnvIO where
168161 , ioEnvOutputFile = Nothing -- stdout
169162 }
170163
171−runIO :: PandocIO a -> IO (Either PandocExecutionError a)
164+runIO :: PandocIO a -> IO (Either PandocError a)
172165runIO ma = flip evalStateT def $ flip runReaderT def $ runExceptT $ unPandocIO ma
173166
174167withMediaBag :: PandocMonad m => m a -> m (a, MediaBag)
175168withMediaBag ma = ((,)) <$> ma <*> getMediaBag
176169
177170runIOorExplode :: PandocIO a -> IO a
178−runIOorExplode ma = do
179− eitherVal <- runIO ma
180− case eitherVal of
181− Right x -> return x
182− Left (PandocFileReadError fp) -> error $ "problem reading " ++ fp
183− Left (PandocShouldNeverHappenError s) -> error s
184− Left (PandocParseError s) -> error $ "parse error" ++ s
185− Left (PandocSomeError s) -> error s
171+runIOorExplode ma = handleError <$> runIO ma
172+ -- eitherVal <- runIO ma
173+ -- case eitherVal of
174+ -- Right x -> return x
175+ -- Left (PandocFileReadError fp) -> error $ "problem reading " ++ fp
176+ -- Left (PandocShouldNeverHappenError s) -> error s
177+ -- Left (PandocParseError s) -> error $ "parse error" ++ s
178+ -- Left (PandocSomeError s) -> error s
186179
187180
188181
189182
190183
191184newtype PandocIO a = PandocIO {
192− unPandocIO :: ExceptT PandocExecutionError (ReaderT PandocEnvIO (StateT PandocStateIO IO)) a
185+ unPandocIO :: ExceptT PandocError (ReaderT PandocEnvIO (StateT PandocStateIO IO)) a
193186 } deriving ( MonadIO
194187 , Functor
195188 , Applicative
196189 , Monad
197190 , MonadReader PandocEnvIO
198191 , MonadState PandocStateIO
199− , MonadError PandocExecutionError
192+ , MonadError PandocError
200193 )
201194
202195instance PandocMonad PandocIO where
@@ -303,20 +296,18 @@ instance Default PureEnv where
303296 , envOutputFile = Nothing
304297 }
305298
306−instance E.Exception PandocExecutionError
307−
308299newtype PandocPure a = PandocPure {
309− unPandocPure :: ExceptT PandocExecutionError
300+ unPandocPure :: ExceptT PandocError
310301 (ReaderT PureEnv (State PureState)) a
311302 } deriving ( Functor
312303 , Applicative
313304 , Monad
314305 , MonadReader PureEnv
315306 , MonadState PureState
316− , MonadError PandocExecutionError
307+ , MonadError PandocError
317308 )
318309
319−runPure :: PandocPure a -> Either PandocExecutionError a
310+runPure :: PandocPure a -> Either PandocError a
320311runPure x = flip evalState def $ flip runReaderT def $ runExceptT $ unPandocPure x
321312
322313instance PandocMonad PandocPure where