git.iko.soy/typeable/pandoc
on master help sign in
Unify Errors.
commit3574b98f81c2c24f7ef31f8251ba88792a2c06f0 authorJesse Rosenthal <jrosenthal@jhu.edu> dateThu 1 Dec 2016, 12:13 (10 years ago) parent52859b9
27 files changed+83−64
src/Text/Pandoc.hs+2−2 src/Text/Pandoc/Class.hs+16−25 src/Text/Pandoc/Error.hs+18−8 src/Text/Pandoc/Parsing.hs+1−1 src/Text/Pandoc/Readers/Docx.hs+2−1 src/Text/Pandoc/Readers/EPUB.hs+2−1 src/Text/Pandoc/Readers/HTML.hs+2−1 src/Text/Pandoc/Readers/Haddock.hs+3−2 src/Text/Pandoc/Readers/LaTeX.hs+2−2 src/Text/Pandoc/Readers/Markdown.hs+2−1 src/Text/Pandoc/Readers/MediaWiki.hs+2−1 src/Text/Pandoc/Readers/Native.hs+1−1 src/Text/Pandoc/Readers/OPML.hs+2−2 src/Text/Pandoc/Readers/Odt.hs+3−3 src/Text/Pandoc/Readers/Org.hs+2−1 src/Text/Pandoc/Readers/RST.hs+2−1 src/Text/Pandoc/Readers/TWiki.hs+1−1 src/Text/Pandoc/Readers/Textile.hs+2−1 src/Text/Pandoc/Readers/Txt2Tags.hs+2−1 src/Text/Pandoc/Writers/EPUB.hs+2−1 src/Text/Pandoc/Writers/FB2.hs+2−1 src/Text/Pandoc/Writers/HTML.hs+2−1 src/Text/Pandoc/Writers/Man.hs+2−1 src/Text/Pandoc/Writers/Markdown.hs+2−1 src/Text/Pandoc/Writers/OPML.hs+2−1 src/Text/Pandoc/Writers/RTF.hs+2−1 src/Text/Pandoc/Writers/Texinfo.hs+2−1
src/Text/Pandoc.hs+2−2
@@ -180,7 +180,7 @@ import Text.Pandoc.Templates
180180import Text.Pandoc.Options
181181import Text.Pandoc.Shared (safeRead, mapLeft, pandocVersion)
182182import Text.Pandoc.Error
183−import Text.Pandoc.Class (PandocMonad, runIOorExplode, PandocExecutionError(..))
183+import Text.Pandoc.Class (PandocMonad, runIOorExplode)
184184import Data.Aeson
185185import qualified Data.ByteString.Lazy as BL
186186import Data.List (intercalate)
@@ -387,7 +387,7 @@ class ToJSONFilter a => ToJsonFilter a
387387 toJsonFilter = toJSONFilter
388388
389389readJSON :: ReaderOptions -> String -> Either PandocError Pandoc
390−readJSON _ = mapLeft ParseFailure . eitherDecode' . UTF8.fromStringLazy
390+readJSON _ = mapLeft PandocParseError . eitherDecode' . UTF8.fromStringLazy
391391
392392writeJSON :: WriterOptions -> Pandoc -> String
393393writeJSON _ = UTF8.toStringLazy . encode
src/Text/Pandoc/Class.hs+16−25
@@ -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
src/Text/Pandoc/Error.hs+18−8
@@ -33,17 +33,24 @@ module Text.Pandoc.Error (PandocError(..), handleError) where
3333
3434import Text.Parsec.Error
3535import Text.Parsec.Pos hiding (Line)
36−import GHC.Generics (Generic)
3736import Data.Generics (Typeable)
3837import Control.Exception (Exception)
3938
4039type Input = String
4140
42−data PandocError = -- | Generic parse failure
43− ParseFailure String
44− -- | Error thrown by a Parsec parser
45− | ParsecError Input ParseError
46− deriving (Show, Typeable, Generic)
41+data PandocError = PandocFileReadError FilePath
42+ | PandocShouldNeverHappenError String
43+ | PandocSomeError String
44+ | PandocParseError String
45+ | PandocParsecError Input ParseError
46+ deriving (Show, Typeable)
47+
48+
49+-- data PandocError = -- | Generic parse failure
50+-- ParseFailure String
51+-- -- | Error thrown by a Parsec parser
52+-- | ParsecError Input ParseError
53+-- deriving (Show, Typeable, Generic)
4754
4855instance Exception PandocError
4956
@@ -52,8 +59,11 @@ handleError :: Either PandocError a -> a
5259handleError (Right r) = r
5360handleError (Left err) =
5461 case err of
55− ParseFailure string -> error string
56− ParsecError input err' ->
62+ PandocFileReadError fp -> error $ "problem reading " ++ fp
63+ PandocShouldNeverHappenError s -> error s
64+ PandocSomeError s -> error s
65+ PandocParseError s -> error s
66+ PandocParsecError input err' ->
5767 let errPos = errorPos err'
5868 errLine = sourceLine errPos
5969 errColumn = sourceColumn errPos
src/Text/Pandoc/Parsing.hs+1−1
@@ -885,7 +885,7 @@ readWithM :: (Monad m)
885885 -> String -- ^ input
886886 -> m (Either PandocError a)
887887readWithM parser state input =
888− mapLeft (ParsecError input) `liftM` runParserT parser state "source" input
888+ mapLeft (PandocParsecError input) `liftM` runParserT parser state "source" input
889889
890890
891891-- | Parse a string with a given parser and state
src/Text/Pandoc/Readers/Docx.hs+2−1
@@ -96,8 +96,9 @@ import qualified Data.Sequence as Seq (null)
9696#if !(MIN_VERSION_base(4,8,0))
9797import Data.Traversable (traverse)
9898#endif
99+import Text.Pandoc.Error
99100import Control.Monad.Except (throwError)
100−import Text.Pandoc.Class (PandocMonad, PandocExecutionError(..))
101+import Text.Pandoc.Class (PandocMonad)
101102import qualified Text.Pandoc.Class as P
102103
103104readDocx :: PandocMonad m
src/Text/Pandoc/Readers/EPUB.hs+2−1
@@ -32,7 +32,8 @@ import Data.Maybe (mapMaybe, fromMaybe)
3232import qualified Data.Map as M (Map, lookup, fromList, elems)
3333import Data.Monoid ((<>))
3434import Control.DeepSeq (deepseq, NFData)
35−import Text.Pandoc.Class (PandocMonad, PandocExecutionError(..))
35+import Text.Pandoc.Error
36+import Text.Pandoc.Class (PandocMonad)
3637import qualified Text.Pandoc.Class as P
3738
3839import Debug.Trace (trace)
src/Text/Pandoc/Readers/HTML.hs+2−1
@@ -68,7 +68,8 @@ import Text.Pandoc.CSS (foldOrElse, pickStyleAttrProps)
6868import Data.Monoid ((<>))
6969import Text.Parsec.Error
7070import qualified Data.Set as Set
71−import Text.Pandoc.Class (PandocMonad, PandocExecutionError(..))
71+import Text.Pandoc.Error
72+import Text.Pandoc.Class (PandocMonad)
7273import Control.Monad.Except (throwError)
7374
7475
src/Text/Pandoc/Readers/Haddock.hs+3−2
@@ -25,8 +25,9 @@ import Text.Pandoc.Options
2525import Documentation.Haddock.Parser
2626import Documentation.Haddock.Types
2727import Debug.Trace (trace)
28+import Text.Pandoc.Error
2829import Control.Monad.Except (throwError)
29−import Text.Pandoc.Class (PandocMonad, PandocExecutionError(..))
30+import Text.Pandoc.Class (PandocMonad)
3031
3132
3233-- | Parse Haddock markup and return a 'Pandoc' document.
@@ -40,7 +41,7 @@ readHaddock opts s = case readHaddockEither opts s of
4041
4142readHaddockEither :: ReaderOptions -- ^ Reader options
4243 -> String -- ^ String to parse
43− -> Either PandocExecutionError Pandoc
44+ -> Either PandocError Pandoc
4445readHaddockEither opts =
4546#if MIN_VERSION_haddock_library(1,2,0)
4647 Right . B.doc . docHToBlocks . trace' . _doc . parseParas
src/Text/Pandoc/Readers/LaTeX.hs+2−2
@@ -57,7 +57,7 @@ import Text.Pandoc.Highlighting (fromListingsLanguage)
5757import Text.Pandoc.ImageSize (numUnit, showFl)
5858import Text.Pandoc.Error
5959import Control.Monad.Except (throwError)
60−import Text.Pandoc.Class (PandocMonad, PandocExecutionError(..), PandocPure)
60+import Text.Pandoc.Class (PandocMonad, PandocPure)
6161
6262-- | Parse LaTeX from string and return 'Pandoc' document.
6363readLaTeX :: PandocMonad m
@@ -939,7 +939,7 @@ type IncludeParser = ParserT String [String] IO String
939939
940940-- | Replace "include" commands with file contents.
941941handleIncludes :: String -> IO (Either PandocError String)
942−handleIncludes s = mapLeft (ParsecError s) <$> runParserT includeParser' [] "input" s
942+handleIncludes s = mapLeft (PandocParsecError s) <$> runParserT includeParser' [] "input" s
943943
944944includeParser' :: IncludeParser
945945includeParser' =
src/Text/Pandoc/Readers/Markdown.hs+2−1
@@ -68,7 +68,8 @@ import Debug.Trace (trace)
6868import Data.Monoid ((<>))
6969import Control.Monad.Trans (lift)
7070import Control.Monad.Except (throwError, catchError)
71−import Text.Pandoc.Class (PandocMonad, PandocExecutionError(..))
71+import Text.Pandoc.Error
72+import Text.Pandoc.Class (PandocMonad)
7273import qualified Text.Pandoc.Class as P
7374
7475type MarkdownParser m = ParserT [Char] ParserState m
src/Text/Pandoc/Readers/MediaWiki.hs+2−1
@@ -58,7 +58,8 @@ import Data.Maybe (fromMaybe)
5858import Text.Printf (printf)
5959import Debug.Trace (trace)
6060import Control.Monad.Except (throwError)
61−import Text.Pandoc.Class (PandocMonad, PandocExecutionError(..))
61+import Text.Pandoc.Error(PandocError(..))
62+import Text.Pandoc.Class (PandocMonad)
6263
6364-- | Read mediawiki from an input string and return a Pandoc document.
6465readMediaWiki :: PandocMonad m
src/Text/Pandoc/Readers/Native.hs+1−1
@@ -65,5 +65,5 @@ readInlines :: String -> Either PandocError [Inline]
6565readInlines s = maybe ((:[]) <$> readInline s) Right (safeRead s)
6666
6767readInline :: String -> Either PandocError Inline
68−readInline s = maybe (Left . ParseFailure $ "Could not read: " ++ s) Right (safeRead s)
68+readInline s = maybe (Left . PandocParseError $ "Could not read: " ++ s) Right (safeRead s)
6969
src/Text/Pandoc/Readers/OPML.hs+2−2
@@ -13,7 +13,7 @@ import Control.Monad.State
1313import Data.Default
1414import Control.Monad.Except
1515import Text.Pandoc.Error
16−import Text.Pandoc.Class (PandocMonad, PandocExecutionError(..))
16+import Text.Pandoc.Class (PandocMonad)
1717
1818type OPML m = StateT OPMLState m
1919
@@ -65,7 +65,7 @@ attrValue attr elt =
6565 Just z -> z
6666 Nothing -> ""
6767
68−-- exceptT :: PandocMonad m => Either PandocExecutionError a -> OPML m a
68+-- exceptT :: PandocMonad m => Either PandocError a -> OPML m a
6969-- exceptT = either throwError return
7070
7171asHtml :: PandocMonad m => String -> OPML m Inlines
src/Text/Pandoc/Readers/Odt.hs+3−3
@@ -41,7 +41,7 @@ import System.FilePath
4141
4242import Control.Monad.Except (throwError)
4343
44−import Text.Pandoc.Class (PandocMonad, PandocExecutionError(..))
44+import Text.Pandoc.Class (PandocMonad)
4545import qualified Text.Pandoc.Class as P
4646import Text.Pandoc.Definition
4747import Text.Pandoc.Error
@@ -78,7 +78,7 @@ readOdt' _ bytes = bytesToOdt bytes-- of
7878bytesToOdt :: B.ByteString -> Either PandocError (Pandoc, MediaBag)
7979bytesToOdt bytes = case toArchiveOrFail bytes of
8080 Right archive -> archiveToOdt archive
81− Left _ -> Left $ ParseFailure "Couldn't parse odt file."
81+ Left _ -> Left $ PandocParseError "Couldn't parse odt file."
8282
8383--
8484archiveToOdt :: Archive -> Either PandocError (Pandoc, MediaBag)
@@ -99,7 +99,7 @@ archiveToOdt archive
9999
100100 | otherwise
101101 -- Not very detailed, but I don't think more information would be helpful
102− = Left $ ParseFailure "Couldn't parse odt file."
102+ = Left $ PandocParseError "Couldn't parse odt file."
103103 where
104104 filePathIsOdtMedia :: FilePath -> Bool
105105 filePathIsOdtMedia fp =
src/Text/Pandoc/Readers/Org.hs+2−1
@@ -31,8 +31,9 @@ import Text.Pandoc.Readers.Org.Blocks ( blockList, meta )
3131import Text.Pandoc.Readers.Org.Parsing ( OrgParser, readWithM )
3232import Text.Pandoc.Readers.Org.ParserState ( optionsToParserState )
3333
34−import Text.Pandoc.Class (PandocMonad, PandocExecutionError(..))
34+import Text.Pandoc.Class (PandocMonad)
3535import Text.Pandoc.Definition
36+import Text.Pandoc.Error
3637import Text.Pandoc.Options
3738
3839import Control.Monad.Except ( throwError )
src/Text/Pandoc/Readers/RST.hs+2−1
@@ -51,7 +51,8 @@ import Data.Char (toLower, isHexDigit, isSpace)
5151import Data.Monoid ((<>))
5252import Control.Monad.Except (throwError)
5353import Control.Monad.Trans (lift)
54−import Text.Pandoc.Class (PandocMonad, PandocExecutionError(..))
54+import Text.Pandoc.Error
55+import Text.Pandoc.Class (PandocMonad)
5556import qualified Text.Pandoc.Class as P
5657
5758-- | Parse reStructuredText string and return Pandoc document.
src/Text/Pandoc/Readers/TWiki.hs+1−1
@@ -48,7 +48,7 @@ import qualified Data.Foldable as F
4848import Text.Pandoc.Error
4949
5050import Control.Monad.Except (throwError)
51−import Text.Pandoc.Class (PandocMonad, PandocExecutionError(..))
51+import Text.Pandoc.Class (PandocMonad)
5252import qualified Text.Pandoc.Class as P
5353
5454-- | Read twiki from an input string and return a Pandoc document.
src/Text/Pandoc/Readers/Textile.hs+2−1
@@ -68,7 +68,8 @@ import Control.Monad ( guard, liftM, when )
6868import Data.Monoid ((<>))
6969import Text.Printf
7070import Debug.Trace (trace)
71−import Text.Pandoc.Class (PandocMonad, PandocExecutionError(..))
71+import Text.Pandoc.Error
72+import Text.Pandoc.Class (PandocMonad)
7273import Control.Monad.Except (throwError)
7374
7475-- | Parse a Textile text and return a Pandoc document.
src/Text/Pandoc/Readers/Txt2Tags.hs+2−1
@@ -50,7 +50,8 @@ import Control.Monad.Reader (Reader, runReader, asks)
5050import Data.Time.Format (formatTime)
5151import Text.Pandoc.Compat.Time (defaultTimeLocale)
5252import Control.Monad.Except (throwError, catchError)
53−import Text.Pandoc.Class (PandocMonad, PandocExecutionError(..))
53+import Text.Pandoc.Error
54+import Text.Pandoc.Class (PandocMonad)
5455import qualified Text.Pandoc.Class as P
5556
5657type T2T = ParserT String ParserState (Reader T2TMeta)
src/Text/Pandoc/Writers/EPUB.hs+2−1
@@ -65,7 +65,8 @@ import Text.Pandoc.MIME (MimeType, getMimeType, extensionFromMimeType)
6565import Text.Blaze.Html.Renderer.Utf8 (renderHtml)
6666import Text.HTML.TagSoup (Tag(TagOpen), fromAttrib, parseTags)
6767import Control.Monad.Except (throwError)
68−import Text.Pandoc.Class (PandocMonad, PandocExecutionError(..))
68+import Text.Pandoc.Error
69+import Text.Pandoc.Class (PandocMonad)
6970import qualified Text.Pandoc.Class as P
7071
7172-- A Chapter includes a list of blocks and maybe a section
src/Text/Pandoc/Writers/FB2.hs+2−1
@@ -46,7 +46,8 @@ import Text.Pandoc.Definition
4646import Text.Pandoc.Options (WriterOptions(..), HTMLMathMethod(..), def)
4747import Text.Pandoc.Shared (orderedListMarkers, isHeaderBlock, capitalize,
4848 linesToPara)
49−import Text.Pandoc.Class (PandocMonad, PandocExecutionError(..))
49+import Text.Pandoc.Error
50+import Text.Pandoc.Class (PandocMonad)
5051import qualified Text.Pandoc.Class as P
5152
5253-- | Data to be written at the end of the document:
src/Text/Pandoc/Writers/HTML.hs+2−1
@@ -69,7 +69,8 @@ import qualified Text.XML.Light as XML
6969import System.FilePath (takeExtension)
7070import Data.Aeson (Value)
7171import Control.Monad.Except (throwError)
72−import Text.Pandoc.Class (PandocMonad, PandocExecutionError(..))
72+import Text.Pandoc.Error
73+import Text.Pandoc.Class (PandocMonad)
7374
7475data WriterState = WriterState
7576 { stNotes :: [Html] -- ^ List of notes
src/Text/Pandoc/Writers/Man.hs+2−1
@@ -41,8 +41,9 @@ import Data.Maybe (fromMaybe)
4141import Text.Pandoc.Pretty
4242import Text.Pandoc.Builder (deleteMeta)
4343import Control.Monad.State
44+import Text.Pandoc.Error
4445import Control.Monad.Except (throwError)
45−import Text.Pandoc.Class (PandocMonad, PandocExecutionError(..))
46+import Text.Pandoc.Class (PandocMonad)
4647
4748type Notes = [[Block]]
4849data WriterState = WriterState { stNotes :: Notes
src/Text/Pandoc/Writers/Markdown.hs+2−1
@@ -58,7 +58,8 @@ import qualified Data.Vector as V
5858import qualified Data.Text as T
5959import qualified Data.Set as Set
6060import Network.HTTP ( urlEncode )
61−import Text.Pandoc.Class (PandocMonad, PandocExecutionError(..))
61+import Text.Pandoc.Error
62+import Text.Pandoc.Class (PandocMonad)
6263
6364type Notes = [[Block]]
6465type Ref = ([Inline], Target, Attr)
src/Text/Pandoc/Writers/OPML.hs+2−1
@@ -40,8 +40,9 @@ import Text.Pandoc.Writers.Markdown (writeMarkdown)
4040import Text.Pandoc.Pretty
4141import Text.Pandoc.Compat.Time
4242import qualified Text.Pandoc.Builder as B
43+import Text.Pandoc.Error
4344import Control.Monad.Except (throwError)
44−import Text.Pandoc.Class (PandocMonad, PandocExecutionError(..))
45+import Text.Pandoc.Class (PandocMonad)
4546
4647-- | Convert Pandoc document to string in OPML format.
4748writeOPML :: PandocMonad m => WriterOptions -> Pandoc -> m String
src/Text/Pandoc/Writers/RTF.hs+2−1
@@ -44,7 +44,8 @@ import qualified Data.Map as M
4444import Text.Printf ( printf )
4545import Text.Pandoc.ImageSize
4646import Control.Monad.Except (throwError)
47−import Text.Pandoc.Class (PandocMonad, PandocExecutionError(..))
47+import Text.Pandoc.Error
48+import Text.Pandoc.Class (PandocMonad)
4849import qualified Text.Pandoc.Class as P
4950
5051-- | Convert Image inlines into a raw RTF embedded image, read from a file,
src/Text/Pandoc/Writers/Texinfo.hs+2−1
@@ -45,7 +45,8 @@ import Network.URI ( isURI, unEscapeString )
4545import System.FilePath
4646import qualified Data.Set as Set
4747import Control.Monad.Except (throwError)
48−import Text.Pandoc.Class ( PandocMonad, PandocExecutionError(..) )
48+import Text.Pandoc.Error
49+import Text.Pandoc.Class ( PandocMonad)
4950
5051data WriterState =
5152 WriterState { stStrikeout :: Bool -- document contains strikeout