Add `MonadFail` instance for `ParsecT`
authorHerbert Valerio Riedel <hvr@gnu.org>
Thu, 22 Jun 2017 15:26:03 +0000 (17:26 +0200)
committerHerbert Valerio Riedel <hvr@gnu.org>
Thu, 22 Jun 2017 15:26:03 +0000 (17:26 +0200)
...and make `-Wcompat`-clean

CHANGES
Text/Parsec/Prim.hs
parsec.cabal

diff --git a/CHANGES b/CHANGES
index 37eb92f..7bad8cd 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,7 @@
+3.1.12
+
+- Add `MonadFail` instance for `ParsecT`
+
 3.1.11
 
 - Include `README.md` in package.
index af93563..1830d57 100644 (file)
@@ -81,6 +81,7 @@ import qualified Control.Applicative as Applicative ( Applicative(..), Alternati
 import Control.Monad()
 import Control.Monad.Trans
 import Control.Monad.Identity
+import qualified Control.Monad.Fail as Fail
 
 import Control.Monad.Reader.Class
 import Control.Monad.State.Class
@@ -190,7 +191,7 @@ parsecMap f p
       unParser p s (cok . f) cerr (eok . f) eerr
 
 instance Applicative.Applicative (ParsecT s u m) where
-    pure = return
+    pure = parserReturn
     (<*>) = ap -- TODO: Can this be optimized?
 
 instance Applicative.Alternative (ParsecT s u m) where
@@ -198,9 +199,12 @@ instance Applicative.Alternative (ParsecT s u m) where
     (<|>) = mplus
 
 instance Monad (ParsecT s u m) where
-    return x = parserReturn x
-    p >>= f  = parserBind p f
-    fail msg = parserFail msg
+    return = Applicative.pure
+    p >>= f = parserBind p f
+    fail = Fail.fail
+
+instance Fail.MonadFail (ParsecT s u m) where
+    fail = parserFail
 
 instance (MonadIO m) => MonadIO (ParsecT s u m) where
     liftIO = lift . liftIO
index 0ce495e..35a1011 100644 (file)
@@ -1,5 +1,5 @@
 name:          parsec
-version:       3.1.11
+version:       3.1.12
 cabal-version: >= 1.8
 license:       BSD3
 license-file:  LICENSE
@@ -67,6 +67,13 @@ library
        DeriveDataTypeable,
        CPP
 
+    if impl(ghc >= 8.0)
+       ghc-options: -Wcompat -Wnoncanonical-monad-instances -Wnoncanonical-monadfail-instances
+    else
+       -- provide/emulate `Control.Monad.Fail` API for pre-GHC8
+       build-depends: fail == 4.9.*
+
+
 Test-Suite tests
     type:        exitcode-stdio-1.0
     hs-source-dirs:  test