File tree Expand file tree Collapse file tree 4 files changed +8
-13
lines changed Expand file tree Collapse file tree 4 files changed +8
-13
lines changed Original file line number Diff line number Diff line change 3131
3232 instance lazy1ParserT :: Lazy1 (ParserT s m)
3333
34+ instance lazyParserT :: Lazy (ParserT s m a)
35+
3436 instance monadParserT :: (Monad m) => Monad (ParserT s m)
3537
3638 instance monadPlusParserT :: (Monad m) => MonadPlus (ParserT s m)
8183
8284 endBy1 :: forall m s a sep. (Monad m) => ParserT s m a -> ParserT s m sep -> ParserT s m [a]
8385
84- fix :: forall m s a. (ParserT m s a -> ParserT m s a) -> ParserT m s a
85-
86- fix2 :: forall m s a b. (Tuple (ParserT m s a) (ParserT m s b) -> Tuple (ParserT m s a) (ParserT m s b)) -> Tuple (ParserT m s a) (ParserT m s b)
87-
8886 option :: forall m s a. (Monad m) => a -> ParserT s m a -> ParserT s m a
8987
9088 optionMaybe :: forall m s a. (Functor m, Monad m) => ParserT s m a -> ParserT s m (Maybe a)
Original file line number Diff line number Diff line change @@ -8,6 +8,7 @@ import Control.Alt
88import Control.Alternative
99import Control.Monad.Eff
1010import Control.Monad.Identity
11+ import Control.Lazy
1112
1213import Debug.Trace
1314
@@ -20,7 +21,7 @@ parens :: forall m a. (Monad m) => ParserT String m a -> ParserT String m a
2021parens = between (string " (" ) (string " )" )
2122
2223nested :: forall m . (Functor m , Monad m ) => ParserT String m Number
23- nested = fix $ \p -> (do
24+ nested = fix1 $ \p -> (do
2425 string " a"
2526 return 0 ) <|> ((+) 1 ) <$> parens p
2627
Original file line number Diff line number Diff line change @@ -84,6 +84,9 @@ instance monadStateParserT :: (Monad m) => MonadState s (ParserT s m) where
8484 return $ case f s of
8585 Tuple a s' -> { input: s', consumed: false , result: Right a }
8686
87+ instance lazyParserT :: Lazy (ParserT s m a ) where
88+ defer f = ParserT $ \s -> unParserT (f unit) s
89+
8790instance lazy1ParserT :: Lazy1 (ParserT s m ) where
8891 defer1 f = ParserT $ \s -> unParserT (f unit) s
8992
Original file line number Diff line number Diff line change @@ -7,6 +7,7 @@ import Data.Either
77
88import Control.Alt
99import Control.Alternative
10+ import Control.Lazy
1011import Control.Monad
1112import Control.Monad.Error.Trans
1213import Control.Monad.Error.Class
@@ -15,14 +16,6 @@ import Control.Monad.State.Class
1516
1617import Text.Parsing.Parser
1718
18- fix :: forall m s a . (ParserT m s a -> ParserT m s a ) -> ParserT m s a
19- fix f = ParserT $ \s -> unParserT (f (fix f)) s
20-
21- fix2 :: forall m s a b . (Tuple (ParserT m s a ) (ParserT m s b ) -> Tuple (ParserT m s a ) (ParserT m s b )) -> Tuple (ParserT m s a ) (ParserT m s b )
22- fix2 f = Tuple
23- (ParserT $ \s -> unParserT (fst (f (fix2 f))) s)
24- (ParserT $ \s -> unParserT (snd (f (fix2 f))) s)
25-
2619(<?>) :: forall m s a . (Monad m ) => ParserT s m a -> String -> ParserT s m a
2720(<?>) p msg = p <|> fail (" Expected " ++ msg)
2821
You can’t perform that action at this time.
0 commit comments