@@ -65,7 +65,9 @@ module Text.Pandoc.Shared (
6565 readDataFile,
6666 -- * Error handling
6767 err,
68− warn
68+ warn,
69+ -- * Safe read
70+ safeRead
6971 ) where
7072
7173import Text.Pandoc.Definition
@@ -489,3 +491,12 @@ warn :: String -> IO ()
489491warn msg = do
490492 name <- getProgName
491493 UTF8.hPutStrLn stderr $ name ++ ": " ++ msg
494+
495+--
496+-- Safe read
497+--
498+
499+safeRead :: (Monad m, Read a) => String -> m a
500+safeRead s = case reads s of
501+ (d,[]):_ -> return d
502+ _ -> fail $ "Could not read `" ++ s ++ "'"