@@ -7,7 +7,7 @@ import Data.Tuple
77
88import Control.Alt
99import Control.Alternative
10- import Control.Plus
10+ import Control.Lazy
1111import Control.Monad
1212import Control.Monad.Identity
1313import Control.Monad.Trans
@@ -17,6 +17,7 @@ import Control.Monad.Error
1717import Control.Monad.Error.Class
1818import Control.Monad.Error.Trans
1919import Control.MonadPlus
20+ import Control.Plus
2021
2122data ParseError = ParseError
2223 { message :: String
@@ -26,7 +27,7 @@ instance errorParseError :: Error ParseError where
2627 noMsg = ParseError { message: " " }
2728 strMsg msg = ParseError { message: msg }
2829
29- data ParserT s m a = ParserT (s -> m { input :: s , result :: Either ParseError a , consumed :: Boolean } )
30+ newtype ParserT s m a = ParserT (s -> m { input :: s , result :: Either ParseError a , consumed :: Boolean } )
3031
3132unParserT :: forall m s a . ParserT s m a -> s -> m { input :: s , result :: Either ParseError a , consumed :: Boolean }
3233unParserT (ParserT p) = p
@@ -83,8 +84,11 @@ instance monadStateParserT :: (Monad m) => MonadState s (ParserT s m) where
8384 return $ case f s of
8485 Tuple a s' -> { input: s', consumed: false , result: Right a }
8586
86- consume :: forall s m . (Monad m ) => ParserT s m { }
87- consume = ParserT $ \s -> return { consumed: true , input: s, result: Right {} }
87+ instance lazy1ParserT :: Lazy1 (ParserT s m ) where
88+ defer1 f = ParserT $ \s -> unParserT (f unit) s
89+
90+ consume :: forall s m . (Monad m ) => ParserT s m Unit
91+ consume = ParserT $ \s -> return { consumed: true , input: s, result: Right unit }
8892
8993fail :: forall m s a . (Monad m ) => String -> ParserT s m a
9094fail message = ParserT $ \s -> return { input: s, consumed: false , result: Left (ParseError { message: message }) }
0 commit comments