@@ -45,6 +45,7 @@ import Language.Haskell.Exts.Extension -- (Extension, impliesExts, haskell2010)
45
45
import Data.List (intercalate )
46
46
import Control.Applicative
47
47
import Control.Monad (when , liftM , ap )
48
+ import qualified Control.Monad.Fail as Fail
48
49
import Data.Monoid hiding ((<>) )
49
50
import Data.Semigroup (Semigroup (.. ))
50
51
-- To avoid import warnings for Control.Applicative, Data.Monoid, and Data.Semigroup
@@ -95,9 +96,11 @@ instance Applicative ParseResult where
95
96
96
97
instance Monad ParseResult where
97
98
return = ParseOk
98
- fail = ParseFailed noLoc
99
+ fail = Fail. fail
99
100
ParseOk x >>= f = f x
100
101
ParseFailed loc msg >>= _ = ParseFailed loc msg
102
+ instance Fail. MonadFail ParseResult where
103
+ fail = ParseFailed noLoc
101
104
102
105
instance Semigroup m => Semigroup (ParseResult m ) where
103
106
ParseOk x <> ParseOk y = ParseOk $ x <> y
@@ -243,6 +246,9 @@ instance Monad P where
243
246
case m i x y l ch s mode of
244
247
Failed loc msg -> Failed loc msg
245
248
Ok s' a -> runP (k a) i x y l ch s' mode
249
+ fail = Fail. fail
250
+
251
+ instance Fail. MonadFail P where
246
252
fail s = P $ \ _r _col _line loc _ _stk _m -> Failed loc s
247
253
248
254
atSrcLoc :: P a -> SrcLoc -> P a
@@ -348,6 +354,9 @@ instance Monad (Lex r) where
348
354
return a = Lex $ \ k -> k a
349
355
Lex v >>= f = Lex $ \ k -> v (\ a -> runL (f a) k)
350
356
Lex v >> Lex w = Lex $ \ k -> v (\ _ -> w k)
357
+ fail = Fail. fail
358
+
359
+ instance Fail. MonadFail (Lex r ) where
351
360
fail s = Lex $ \ _ -> fail s
352
361
353
362
-- Operations on this monad
0 commit comments