diff options
author | David Luposchainsky <dluposchainsky@gmail.com> | 2015-11-17 17:10:02 +0100 |
---|---|---|
committer | Ben Gamari <bgamari.foss@gmail.com> | 2015-11-17 12:29:09 -0500 |
commit | 233d1312bf15940fca5feca6884f965e7944b555 (patch) | |
tree | 0f787688562e65c1043626d8d03447ef2ab0b7a7 /libraries | |
parent | 7b962bab384e2ae85b41d30f503c3d0295b0214f (diff) | |
download | haskell-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.hs | 2 | ||||
-rw-r--r-- | libraries/base/Text/ParserCombinators/ReadP.hs | 15 | ||||
-rw-r--r-- | libraries/base/Text/ParserCombinators/ReadPrec.hs | 10 |
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 = (+++) |