@@ -213,14 +213,16 @@ parseFormatSpec = parse formatSpec ""
213213 '-' -> Set.delete ext
214214 _ -> Set.insert ext
215215
216+-- TODO: when we get the PandocMonad stuff all sorted out,
217+-- we can simply these types considerably. Errors/MediaBag can be
218+-- part of the monad's internal state.
219+data Reader m = StringReader (ReaderOptions -> String -> m (Either PandocError Pandoc))
220+ | ByteStringReader (ReaderOptions -> BL.ByteString -> m (Either PandocError (Pandoc,MediaBag)))
216221
217−data Reader = StringReader (ReaderOptions -> String -> IO (Either PandocError Pandoc))
218− | ByteStringReader (ReaderOptions -> BL.ByteString -> IO (Either PandocError (Pandoc,MediaBag)))
219−
220−mkStringReader :: (ReaderOptions -> String -> Either PandocError Pandoc) -> Reader
222+mkStringReader :: (ReaderOptions -> String -> Either PandocError Pandoc) -> Reader IO
221223mkStringReader r = StringReader (\o s -> return $ r o s)
222224
223−mkStringReaderWithWarnings :: (ReaderOptions -> String -> Either PandocError (Pandoc, [String])) -> Reader
225+mkStringReaderWithWarnings :: (ReaderOptions -> String -> Either PandocError (Pandoc, [String])) -> Reader IO
224226mkStringReaderWithWarnings r = StringReader $ \o s ->
225227 case r o s of
226228 Left err -> return $ Left err
@@ -228,10 +230,10 @@ mkStringReaderWithWarnings r = StringReader $ \o s ->
228230 mapM_ warn warnings
229231 return (Right doc)
230232
231−mkBSReader :: (ReaderOptions -> BL.ByteString -> Either PandocError (Pandoc, MediaBag)) -> Reader
233+mkBSReader :: (ReaderOptions -> BL.ByteString -> Either PandocError (Pandoc, MediaBag)) -> Reader IO
232234mkBSReader r = ByteStringReader (\o s -> return $ r o s)
233235
234−mkBSReaderWithWarnings :: (ReaderOptions -> BL.ByteString -> Either PandocError (Pandoc, MediaBag, [String])) -> Reader
236+mkBSReaderWithWarnings :: (ReaderOptions -> BL.ByteString -> Either PandocError (Pandoc, MediaBag, [String])) -> Reader IO
235237mkBSReaderWithWarnings r = ByteStringReader $ \o s ->
236238 case r o s of
237239 Left err -> return $ Left err
@@ -240,7 +242,7 @@ mkBSReaderWithWarnings r = ByteStringReader $ \o s ->
240242 return $ Right (doc, mediaBag)
241243
242244-- | Association list of formats and readers.
243−readers :: [(String, Reader)]
245+readers :: [(String, Reader IO)]
244246readers = [ ("native" , StringReader $ \_ s -> return $ readNative s)
245247 ,("json" , mkStringReader readJSON )
246248 ,("markdown" , mkStringReaderWithWarnings readMarkdownWithWarnings)
@@ -349,7 +351,7 @@ getDefaultExtensions "epub" = Set.fromList [Ext_raw_html,
349351getDefaultExtensions _ = Set.fromList [Ext_auto_identifiers]
350352
351353-- | Retrieve reader based on formatSpec (format+extensions).
352−getReader :: String -> Either String Reader
354+getReader :: String -> Either String (Reader IO)
353355getReader s =
354356 case parseFormatSpec s of
355357 Left e -> Left $ intercalate "\n" [m | Message m <- errorMessages e]