summaryrefslogtreecommitdiff
path: root/libraries
diff options
context:
space:
mode:
authorDavid Luposchainsky <dluposchainsky@gmail.com>2015-11-17 17:10:02 +0100
committerBen Gamari <bgamari.foss@gmail.com>2015-11-17 12:29:09 -0500
commit233d1312bf15940fca5feca6884f965e7944b555 (patch)
tree0f787688562e65c1043626d8d03447ef2ab0b7a7 /libraries
parent7b962bab384e2ae85b41d30f503c3d0295b0214f (diff)
downloadhaskell-233d1312bf15940fca5feca6884f965e7944b555.tar.gz
MonadFail proposal, phase 1
This implements phase 1 of the MonadFail proposal (MFP, #10751). - MonadFail warnings are all issued as desired, tunable with two new flags - GHC was *not* made warning-free with `-fwarn-missing-monadfail-warnings` (but it's disabled by default right now) Credits/thanks to - Franz Thoma, whose help was crucial to implementing this - My employer TNG Technology Consulting GmbH for partially funding us for this work Reviewers: goldfire, austin, #core_libraries_committee, hvr, bgamari, fmthoma Reviewed By: hvr, bgamari, fmthoma Subscribers: thomie Projects: #ghc Differential Revision: https://phabricator.haskell.org/D1248 GHC Trac Issues: #10751
Diffstat (limited to 'libraries')
-rw-r--r--libraries/base/Control/Monad.hs2
-rw-r--r--libraries/base/Text/ParserCombinators/ReadP.hs15
-rw-r--r--libraries/base/Text/ParserCombinators/ReadPrec.hs10
3 files changed, 26 insertions, 1 deletions
diff --git a/libraries/base/Control/Monad.hs b/libraries/base/Control/Monad.hs
index 7de41bacc6..6957ad464f 100644
--- a/libraries/base/Control/Monad.hs
+++ b/libraries/base/Control/Monad.hs
@@ -75,8 +75,8 @@ module Control.Monad
, (<$!>)
) where
-import Data.Functor ( void, (<$>) )
import Data.Foldable ( Foldable, sequence_, sequenceA_, msum, mapM_, foldlM, forM_ )
+import Data.Functor ( void, (<$>) )
import Data.Traversable ( forM, mapM, traverse, sequence, sequenceA )
import GHC.Base hiding ( mapM, sequence )
diff --git a/libraries/base/Text/ParserCombinators/ReadP.hs b/libraries/base/Text/ParserCombinators/ReadP.hs
index bae2abc90e..3908b24408 100644
--- a/libraries/base/Text/ParserCombinators/ReadP.hs
+++ b/libraries/base/Text/ParserCombinators/ReadP.hs
@@ -1,5 +1,6 @@
{-# LANGUAGE Trustworthy #-}
{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE CPP #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE DeriveFunctor #-}
@@ -76,6 +77,10 @@ import GHC.Unicode ( isSpace )
import GHC.List ( replicate, null )
import GHC.Base hiding ( many )
+#if __GLASGOW_HASKELL__ > 710
+import Control.Monad.Fail
+#endif
+
infixr 5 +++, <++
------------------------------------------------------------------------
@@ -119,6 +124,11 @@ instance Monad P where
fail _ = Fail
+#if __GLASGOW_HASKELL__ > 710
+instance MonadFail P where
+ fail _ = Fail
+#endif
+
instance Alternative P where
empty = Fail
@@ -166,6 +176,11 @@ instance Monad ReadP where
fail _ = R (\_ -> Fail)
R m >>= f = R (\k -> m (\a -> let R m' = f a in m' k))
+#if __GLASGOW_HASKELL__ > 710
+instance MonadFail ReadP where
+ fail _ = R (\_ -> Fail)
+#endif
+
instance Alternative ReadP where
empty = mzero
(<|>) = mplus
diff --git a/libraries/base/Text/ParserCombinators/ReadPrec.hs b/libraries/base/Text/ParserCombinators/ReadPrec.hs
index 02268364ca..a1ce920ce2 100644
--- a/libraries/base/Text/ParserCombinators/ReadPrec.hs
+++ b/libraries/base/Text/ParserCombinators/ReadPrec.hs
@@ -1,5 +1,6 @@
{-# LANGUAGE Trustworthy #-}
{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE CPP #-}
-----------------------------------------------------------------------------
-- |
@@ -64,6 +65,10 @@ import qualified Text.ParserCombinators.ReadP as ReadP
import GHC.Num( Num(..) )
import GHC.Base
+#if __GLASGOW_HASKELL__ > 710
+import qualified Control.Monad.Fail as MonadFail
+#endif
+
-- ---------------------------------------------------------------------------
-- The readPrec type
@@ -82,6 +87,11 @@ instance Monad ReadPrec where
fail s = P (\_ -> fail s)
P f >>= k = P (\n -> do a <- f n; let P f' = k a in f' n)
+#if __GLASGOW_HASKELL__ > 710
+instance MonadFail.MonadFail ReadPrec where
+ fail s = P (\_ -> fail s)
+#endif
+
instance MonadPlus ReadPrec where
mzero = pfail
mplus = (+++)