Skip to content

Commit 8f2e625

Browse files
committed
Merge pull request #8 from joneshf/master
Bunch of combinators and some string stuff.
2 parents 4957979 + afdd5f0 commit 8f2e625

File tree

5 files changed

+80
-11
lines changed

5 files changed

+80
-11
lines changed

Diff for: .travis.yml

+9-5
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
language: node_js
22
node_js:
33
- "0.10"
4+
env:
5+
- PATH=$HOME/bin:$PATH purescript_datadir=$HOME/.local/share/purescript
6+
before_install:
7+
- mkdir -p $HOME/bin
8+
- mkdir -p $HOME/.local/share/purescript/prelude
49
install:
5-
- "sudo apt-get install cabal-install"
6-
- "cabal update"
7-
- "cabal install Cabal cabal-install"
8-
- "export PATH=~/.cabal/bin:$PATH"
9-
- "cabal install purescript --force-reinstalls"
10+
- wget https://github.com/purescript/purescript/releases/download/v0.5.7.1/linux64.tar.gz
11+
- tar zxvf linux64.tar.gz
12+
- cp purescript/{docgen,psc,psci,psc-make} $HOME/bin
13+
- cp purescript/prelude.purs $purescript_datadir/prelude/prelude.purs
1014
- "npm install bower grunt-cli -g"
1115
- "npm install"
1216
- "bower install"

Diff for: docs/Module.md

+23-2
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@
5757

5858
## Module Text.Parsing.Parser.Combinators
5959

60+
### Type Class Instances
61+
62+
instance showParseError :: Show ParseError
63+
64+
6065
### Values
6166

6267
(<?>) :: forall m s a. (Monad m) => ParserT s m a -> String -> ParserT s m a
@@ -81,11 +86,17 @@
8186

8287
endBy1 :: forall m s a sep. (Monad m) => ParserT s m a -> ParserT s m sep -> ParserT s m [a]
8388

89+
lookAhead :: forall s a m. (Monad m) => ParserT s m a -> ParserT s m a
90+
91+
many1Till :: forall s a m e. (Monad m) => ParserT s m a -> ParserT s m e -> ParserT s m [a]
92+
93+
manyTill :: forall s a m e. (Monad m) => ParserT s m a -> ParserT s m e -> ParserT s m [a]
94+
8495
option :: forall m s a. (Monad m) => a -> ParserT s m a -> ParserT s m a
8596

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

88-
optional :: forall m s a. (Monad m) => ParserT s m a -> ParserT s m { }
99+
optional :: forall m s a. (Monad m) => ParserT s m a -> ParserT s m Unit
89100

90101
sepBy :: forall m s a sep. (Monad m) => ParserT s m a -> ParserT s m sep -> ParserT s m [a]
91102

@@ -95,6 +106,10 @@
95106

96107
sepEndBy1 :: forall m s a sep. (Monad m) => ParserT s m a -> ParserT s m sep -> ParserT s m [a]
97108

109+
skipMany :: forall s a m. (Monad m) => ParserT s m a -> ParserT s m Unit
110+
111+
skipMany1 :: forall s a m. (Monad m) => ParserT s m a -> ParserT s m Unit
112+
98113
try :: forall m s a. (Functor m) => ParserT s m a -> ParserT s m a
99114

100115

@@ -142,10 +157,16 @@
142157

143158
char :: forall m. (Monad m) => ParserT String m String
144159

145-
eof :: forall m. (Monad m) => ParserT String m { }
160+
eof :: forall m. (Monad m) => ParserT String m Unit
161+
162+
noneOf :: forall s m a. (Monad m) => [String] -> ParserT String m String
163+
164+
oneOf :: forall s m a. (Monad m) => [String] -> ParserT String m String
146165

147166
satisfy :: forall m. (Monad m) => (String -> Boolean) -> ParserT String m String
148167

168+
skipSpaces :: forall m. (Monad m) => ParserT String m Unit
169+
149170
string :: forall m. (Monad m) => String -> ParserT String m String
150171

151172
whiteSpace :: forall m. (Monad m) => ParserT String m String

Diff for: src/Text/Parsing/Parser.purs

+3
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ instance errorParseError :: Error ParseError where
2727
noMsg = ParseError { message: "" }
2828
strMsg msg = ParseError { message: msg }
2929

30+
instance showParseError :: Show ParseError where
31+
show (ParseError msg) = "ParseError { message: " ++ msg.message ++ " }"
32+
3033
newtype ParserT s m a = ParserT (s -> m { input :: s, result :: Either ParseError a, consumed :: Boolean })
3134

3235
unParserT :: forall m s a. ParserT s m a -> s -> m { input :: s, result :: Either ParseError a, consumed :: Boolean }

Diff for: src/Text/Parsing/Parser/Combinators.purs

+33-2
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ between open close p = do
2929
option :: forall m s a. (Monad m) => a -> ParserT s m a -> ParserT s m a
3030
option a p = p <|> return a
3131

32-
optional :: forall m s a. (Monad m) => ParserT s m a -> ParserT s m {}
32+
optional :: forall m s a. (Monad m) => ParserT s m a -> ParserT s m Unit
3333
optional p = (do p
34-
return {}) <|> return {}
34+
return unit) <|> return unit
3535

3636
optionMaybe :: forall m s a. (Functor m, Monad m) => ParserT s m a -> ParserT s m (Maybe a)
3737
optionMaybe p = option Nothing (Just <$> p)
@@ -106,3 +106,34 @@ choice [] = fail "Nothing to parse"
106106
choice [x] = x
107107
choice (x:xs) = x <|> choice xs
108108

109+
skipMany :: forall s a m. (Monad m) => ParserT s m a -> ParserT s m Unit
110+
skipMany p = skipMany1 p <|> return unit
111+
112+
skipMany1 :: forall s a m. (Monad m) => ParserT s m a -> ParserT s m Unit
113+
skipMany1 p = do
114+
x <- p
115+
xs <- skipMany p
116+
return unit
117+
118+
lookAhead :: forall s a m. (Monad m) => ParserT s m a -> ParserT s m a
119+
lookAhead (ParserT p) = ParserT \s -> do
120+
state <- p s
121+
return state{input = s, consumed = false}
122+
123+
manyTill :: forall s a m e. (Monad m) => ParserT s m a -> ParserT s m e -> ParserT s m [a]
124+
manyTill p end = scan
125+
where
126+
scan = (do
127+
end
128+
return [])
129+
<|> (do
130+
x <- p
131+
xs <- scan
132+
return (x:xs))
133+
134+
many1Till :: forall s a m e. (Monad m) => ParserT s m a -> ParserT s m e -> ParserT s m [a]
135+
many1Till p end = do
136+
x <- p
137+
xs <- manyTill p end
138+
return (x:xs)
139+

Diff for: src/Text/Parsing/Parser/String.purs

+12-2
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ import Control.Monad.State.Class
1616
import Text.Parsing.Parser
1717
import Text.Parsing.Parser.Combinators
1818

19-
eof :: forall m. (Monad m) => ParserT String m {}
19+
eof :: forall m. (Monad m) => ParserT String m Unit
2020
eof = ParserT $ \s ->
2121
return $ case s of
22-
"" -> { consumed: false, input: s, result: Right {} }
22+
"" -> { consumed: false, input: s, result: Right unit }
2323
_ -> { consumed: false, input: s, result: Left (strMsg "Expected EOF") }
2424

2525
string :: forall m. (Monad m) => String -> ParserT String m String
@@ -45,3 +45,13 @@ whiteSpace = do
4545
list <- many $ string "\n" <|> string "\r" <|> string " " <|> string "\t"
4646
return $ foldMap id list
4747

48+
skipSpaces :: forall m. (Monad m) => ParserT String m Unit
49+
skipSpaces = do
50+
whiteSpace
51+
return unit
52+
53+
oneOf :: forall s m a. (Monad m) => [String] -> ParserT String m String
54+
oneOf ss = satisfy (flip elem ss)
55+
56+
noneOf :: forall s m a. (Monad m) => [String] -> ParserT String m String
57+
noneOf ss = satisfy (flip notElem ss)

0 commit comments

Comments
 (0)