Skip to content

Commit 5205e02

Browse files
committed
Use many and some from Control.Alternative
1 parent f9ddbea commit 5205e02

File tree

5 files changed

+17
-20
lines changed

5 files changed

+17
-20
lines changed

docs/Module.md

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
type Parser s a = ParserT s Identity a
1111

12-
data ParserT s m a where
12+
newtype ParserT s m a where
1313
ParserT :: s -> m { consumed :: Boolean, result :: Either ParseError a, input :: s } -> ParserT s m a
1414

1515

@@ -29,6 +29,8 @@
2929

3030
instance functorParserT :: (Functor m) => Functor (ParserT s m)
3131

32+
instance lazy1ParserT :: Lazy1 (ParserT s m)
33+
3234
instance monadParserT :: (Monad m) => Monad (ParserT s m)
3335

3436
instance monadPlusParserT :: (Monad m) => MonadPlus (ParserT s m)
@@ -42,7 +44,7 @@
4244

4345
### Values
4446

45-
consume :: forall s m. (Monad m) => ParserT s m { }
47+
consume :: forall s m. (Monad m) => ParserT s m Unit
4648

4749
fail :: forall m s a. (Monad m) => String -> ParserT s m a
4850

@@ -83,10 +85,6 @@
8385

8486
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)
8587

86-
many :: forall m s a. (Monad m) => ParserT s m a -> ParserT s m [a]
87-
88-
many1 :: forall m s a. (Monad m) => ParserT s m a -> ParserT s m [a]
89-
9088
option :: forall m s a. (Monad m) => a -> ParserT s m a -> ParserT s m a
9189

9290
optionMaybe :: forall m s a. (Functor m, Monad m) => ParserT s m a -> ParserT s m (Maybe a)

examples/Test.purs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import Data.Either
55
import Data.Maybe
66

77
import Control.Alt
8+
import Control.Alternative
89
import Control.Monad.Eff
910
import Control.Monad.Identity
1011

@@ -52,7 +53,7 @@ exprTest = buildExprParser [[Infix (string "/" >>= \_ -> return (/)) AssocRight]
5253

5354
manySatisfyTest :: Parser String [String]
5455
manySatisfyTest = do
55-
r <- many1 $ satisfy (\s -> s /= "?")
56+
r <- some $ satisfy (\s -> s /= "?")
5657
string "?"
5758
return r
5859

src/Text/Parsing/Parser.purs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import Data.Tuple
77

88
import Control.Alt
99
import Control.Alternative
10-
import Control.Plus
10+
import Control.Lazy
1111
import Control.Monad
1212
import Control.Monad.Identity
1313
import Control.Monad.Trans
@@ -17,6 +17,7 @@ import Control.Monad.Error
1717
import Control.Monad.Error.Class
1818
import Control.Monad.Error.Trans
1919
import Control.MonadPlus
20+
import Control.Plus
2021

2122
data 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

3132
unParserT :: forall m s a. ParserT s m a -> s -> m { input :: s, result :: Either ParseError a, consumed :: Boolean }
3233
unParserT (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

8993
fail :: forall m s a. (Monad m) => String -> ParserT s m a
9094
fail message = ParserT $ \s -> return { input: s, consumed: false, result: Left (ParseError { message: message }) }

src/Text/Parsing/Parser/Combinators.purs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import Data.Tuple
66
import Data.Either
77

88
import Control.Alt
9+
import Control.Alternative
910
import Control.Monad
1011
import Control.Monad.Error.Trans
1112
import Control.Monad.Error.Class
@@ -22,14 +23,6 @@ fix2 f = Tuple
2223
(ParserT $ \s -> unParserT (fst (f (fix2 f))) s)
2324
(ParserT $ \s -> unParserT (snd (f (fix2 f))) s)
2425

25-
many :: forall m s a. (Monad m) => ParserT s m a -> ParserT s m [a]
26-
many p = many1 p <|> return []
27-
28-
many1 :: forall m s a. (Monad m) => ParserT s m a -> ParserT s m [a]
29-
many1 p = do a <- p
30-
as <- many p
31-
return (a : as)
32-
3326
(<?>) :: forall m s a. (Monad m) => ParserT s m a -> String -> ParserT s m a
3427
(<?>) p msg = p <|> fail ("Expected " ++ msg)
3528

@@ -78,7 +71,7 @@ sepEndBy1 p sep = do
7871
return (a : as)) <|> return [a]
7972

8073
endBy1 :: forall m s a sep. (Monad m) => ParserT s m a -> ParserT s m sep -> ParserT s m [a]
81-
endBy1 p sep = many1 $ do
74+
endBy1 p sep = some $ do
8275
a <- p
8376
sep
8477
return a

src/Text/Parsing/Parser/String.purs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import Data.Foldable
66
import Data.Monoid
77

88
import Control.Alt
9+
import Control.Alternative
910
import Control.Monad.Error
1011
import Control.Monad.Error.Class
1112
import Control.Monad.State.Class

0 commit comments

Comments
 (0)