git.iko.soy/typeable/pandoc
on master help sign in
Text.Pandoc: Change Reader to Reader m.

For now I just replaced occurences of Reader with Reader IO, so nothing is really different. When we move readers into instances of PandocMonad, though, we can change things here so that the readers will work with any instance of PandocMonad.

commitbf8fb78389c0d2dc06ad91bc379fde5bd7e1f768 authorJohn MacFarlane <jgm@berkeley.edu> dateSun 27 Nov 2016, 15:55 (10 years ago) parent8978689
1 file changed+11−9
src/Text/Pandoc.hs+11−9
src/Text/Pandoc.hs+11−9
@@ -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]