git.iko.soy/typeable/attoparsec
on master help sign in
Add a MonadFix instance.
commit2668636691f4d4fb0e6a8a1403051f14c6e10ebe authorBryan O'Sullivan <bos@serpentine.com> dateFri 25 Jan 2008, 17:46 (19 years ago) parent6038ebe
1 file changed+8
src/Text/ParserCombinators/ByteStringParser.hs+8
src/Text/ParserCombinators/ByteStringParser.hs+8
@@ -70,6 +70,7 @@ module Text.ParserCombinators.ByteStringParser
7070
7171import Control.Applicative (Alternative(..), Applicative(..), (<$>), (<*), (*>))
7272import Control.Monad (MonadPlus(..), ap, liftM2)
73+import Control.Monad.Fix (MonadFix(..))
7374import qualified Data.ByteString.Char8 as SB
7475import qualified Data.ByteString.Lazy.Char8 as LB
7576import qualified Data.ByteString.Lazy.Internal as LB
@@ -115,6 +116,13 @@ instance Monad Parser where
115116 Left (s', msgs) -> Left (s', msgs)
116117 fail err = Parser $ \(S sb lb _) -> Left (sb +: lb, [err])
117118
119+instance MonadFix Parser where
120+ mfix f = Parser $ \s ->
121+ let r = case r of
122+ Right (a, _) -> unParser (f a) s
123+ err -> err
124+ in r
125+
118126zero :: Parser a
119127zero = Parser $ \(S sb lb _) -> Left (sb +: lb, [])
120128{-# INLINE zero #-}