From 2018f41193ab622cc111bb451f2dca783fde89ba Mon Sep 17 00:00:00 2001
From: John MacFarlane <jgm@berkeley.edu>
Date: Sat, 13 Oct 2018 23:10:27 -0700
Subject: [PATCH] Update benchmarks for ghc 8.6.1.

---
 benchmark/benchmark-pandoc.hs | 29 +++++++++++++++++------------
 pandoc.cabal                  |  1 +
 2 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/benchmark/benchmark-pandoc.hs b/benchmark/benchmark-pandoc.hs
index db6c2eb9c..3ed7011e4 100644
--- a/benchmark/benchmark-pandoc.hs
+++ b/benchmark/benchmark-pandoc.hs
@@ -19,6 +19,8 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 -}
 import Prelude
 import Text.Pandoc
+import Text.Pandoc.Error (PandocError(..))
+import Control.Monad.Except (throwError)
 import qualified Text.Pandoc.UTF8 as UTF8
 import qualified Data.ByteString as B
 import Criterion.Main
@@ -37,14 +39,15 @@ readerBench doc name =
                $ nf (\i -> either (error . show) id $ runPure (readerFun i))
                  inp
        Left _ -> Nothing
-  where res = runPure $ do
-          (TextReader r, rexts)
-                     <- either (fail . show) return $ getReader name
-          (TextWriter w, wexts)
-                     <- either (fail . show) return $ getWriter name
-          inp <- w def{ writerWrapText = WrapAuto, writerExtensions = wexts }
-                  doc
-          return (r def{ readerExtensions = rexts }, inp)
+  where res = runPure $
+          case (getReader name, getWriter name) of
+            (Right (TextReader r, rexts),
+             Right (TextWriter w, wexts)) -> do
+               inp <- w def{ writerWrapText = WrapAuto
+                           , writerExtensions = wexts } doc
+               return $ (r def{ readerExtensions = rexts }, inp)
+            _ -> throwError $ PandocSomeError
+                 $ "could not get text reader and writer for " ++ name
 
 writerBench :: Pandoc
             -> String
@@ -55,11 +58,13 @@ writerBench doc name =
           Just $ bench (name ++ " writer")
                $ nf (\d -> either (error . show) id $
                             runPure (writerFun d)) doc
-       _ -> Nothing
+       Left _ -> Nothing
   where res = runPure $ do
-          (TextWriter w, wexts)
-                      <- either (fail . show) return $ getWriter name
-          return $ w def{ writerExtensions = wexts }
+          case (getWriter name) of
+            Right (TextWriter w, wexts) ->
+              return $ w def{ writerExtensions = wexts }
+            _ -> throwError $ PandocSomeError
+                 $ "could not get text reader and writer for " ++ name
 
 main :: IO ()
 main = do
diff --git a/pandoc.cabal b/pandoc.cabal
index c7a7faa85..b6560396c 100644
--- a/pandoc.cabal
+++ b/pandoc.cabal
@@ -699,6 +699,7 @@ benchmark benchmark-pandoc
                    time, bytestring, containers,
                    base >= 4.8 && < 5,
                    text >= 0.11 && < 1.3,
+                   mtl >= 2.2 && < 2.3,
                    criterion >= 1.0 && < 1.6
   if impl(ghc < 8.0)
     build-depends: semigroups == 0.18.*