@@ -55,16 +55,15 @@ import Reporting.Error.Syntax
5555
5656
5757newtype Parser a =
58− Parser
59− { _run
60− :: forall b.
61− State
62− -> (a -> State -> ParseError -> b) -- consumed ok
63− -> ( ParseError -> b) -- consumed err
64− -> (a -> State -> ParseError -> b) -- empty ok
65− -> ( ParseError -> b) -- empty err
66− -> b
67− }
58+ Parser (
59+ forall b.
60+ State
61+ -> (a -> State -> ParseError -> b) -- consumed ok
62+ -> ( ParseError -> b) -- consumed err
63+ -> (a -> State -> ParseError -> b) -- empty ok
64+ -> ( ParseError -> b) -- empty err
65+ -> b
66+ )
6867
6968
7069data State =
@@ -101,8 +100,8 @@ run parser text =
101100
102101
103102runAt :: Int -> Int -> Parser a -> Text -> Either (A.Located E.Error) a
104−runAt sRow sCol parser (Text.Text array offset length) =
105− case _run parser (State array offset length 0 sRow sCol []) Ok Err Ok Err of
103+runAt sRow sCol (Parser parser) (Text.Text array offset length) =
104+ case parser (State array offset length 0 sRow sCol []) Ok Err Ok Err of
106105 Ok value _ _ ->
107106 Right value
108107
@@ -139,9 +138,9 @@ data Result a
139138
140139
141140try :: Parser a -> Parser a
142−try parser =
141+try (Parser parser) =
143142 Parser $ \state cok _ eok eerr ->
144− _run parser state cok eerr eok eerr
143+ parser state cok eerr eok eerr
145144
146145
147146shaderFailure :: Int -> Int -> Text -> Parser a
@@ -157,7 +156,7 @@ deadend thrys =
157156
158157
159158hint :: E.Next -> Parser a -> Parser a
160−hint next parser =
159+hint next (Parser parser) =
161160 Parser $ \state@(State _ _ _ _ row col ctx) cok cerr eok eerr ->
162161 let
163162 eok' x s _ =
@@ -166,7 +165,7 @@ hint next parser =
166165 eerr' _ =
167166 eerr (expect row col ctx (Expecting next))
168167 in
169− _run parser state cok cerr eok' eerr'
168+ parser state cok cerr eok' eerr'
170169
171170
172171endOfFile :: Parser ()
@@ -185,13 +184,13 @@ endOfFile =
185184
186185instance Functor Parser where
187186 {-# INLINE fmap #-}
188− fmap f parser =
187+ fmap f (Parser parser) =
189188 Parser $ \state cok cerr eok eerr ->
190189 let
191190 cok' x s e = cok (f x) s e
192191 eok' x s e = eok (f x) s e
193192 in
194− _run parser state cok' cerr eok' eerr
193+ parser state cok' cerr eok' eerr
195194
196195
197196
@@ -226,7 +225,7 @@ allTheOptionsFailed =
226225
227226
228227oneOfHelp :: Parser a -> Parser a -> Parser a
229−oneOfHelp parser1 parser2 =
228+oneOfHelp (Parser parser1) (Parser parser2) =
230229 Parser $ \state cok cerr eok eerr ->
231230 let
232231 eerr1 e1 =
@@ -234,9 +233,9 @@ oneOfHelp parser1 parser2 =
234233 eok2 y s e2 = eok y s (mergeErrors e1 e2)
235234 eerr2 e2 = eerr (mergeErrors e1 e2)
236235 in
237− _run parser2 state cok cerr eok2 eerr2
236+ parser2 state cok cerr eok2 eerr2
238237 in
239− _run parser1 state cok cerr eok eerr1
238+ parser1 state cok cerr eok eerr1
240239
241240
242241mergeErrors :: ParseError -> ParseError -> ParseError
@@ -277,7 +276,7 @@ instance Monad Parser where
277276 eok value state noError
278277
279278 {-# INLINE (>>=) #-}
280− parser >>= callback =
279+ (Parser parser) >>= callback =
281280 Parser $ \state cok cerr eok eerr ->
282281 let
283282 cok1 x s1 e1 =
@@ -285,16 +284,18 @@ instance Monad Parser where
285284 eok2 y s2 e2 = cok y s2 (mergeErrors e1 e2)
286285 eerr2 e2 = cerr (mergeErrors e1 e2)
287286 in
288− _run (callback x) s1 cok cerr eok2 eerr2
287+ case callback x of
288+ Parser parser2 -> parser2 s1 cok cerr eok2 eerr2
289289
290290 eok1 x s1 e1 =
291291 let
292292 eok2 y s2 e2 = eok y s2 (mergeErrors e1 e2)
293293 eerr2 e2 = eerr (mergeErrors e1 e2)
294294 in
295− _run (callback x) s1 cok cerr eok2 eerr2
295+ case callback x of
296+ Parser parser2 -> parser2 s1 cok cerr eok2 eerr2
296297 in
297− _run parser state cok1 cerr eok1 eerr
298+ parser state cok1 cerr eok1 eerr
298299
299300
300301