on master help sign in
Get rid of Alternative instance for Parser
35ac8afEvan Czaplicki
compiler/src/Parse/Expression.hs+26−26
@@ -6,8 +6,6 @@ module Parse.Expression
6 where
6 where
7
7
8
8
9−import Control.Monad (guard)
10−
11import qualified AST.Source as Src
9import qualified AST.Source as Src
12import qualified Elm.Name as N
10import qualified Elm.Name as N
13import Parse.Primitives
11import Parse.Primitives
@@ -300,34 +298,36 @@ exprHelp start (State ops expr args end pos) =
300 spos <- W.whitespace
298 spos <- W.whitespace
301 hint (E.AfterOpExpr opName) (checkSpace spos)
299 hint (E.AfterOpExpr opName) (checkSpace spos)
302 newStart <- getPosition
300 newStart <- getPosition
303− hint (E.AfterOpExpr opName) $ oneOf $
301+ hint (E.AfterOpExpr opName) $
304− [ -- negative terms
305− do guard ("-" == opName && end /= opStart && opEnd == newStart)
302+ if "-" == opName && end /= opStart && opEnd == newStart
303+ then
304+ -- negative terms
306− rawTerm <- term
305+ do rawTerm <- term
307 newEnd <- getPosition
306 newEnd <- getPosition
308 newPos <- W.whitespace
307 newPos <- W.whitespace
309 let arg = A.at opStart newEnd (Src.Negate rawTerm)
308 let arg = A.at opStart newEnd (Src.Negate rawTerm)
310 exprHelp start (State ops expr (arg:args) newEnd newPos)
309 exprHelp start (State ops expr (arg:args) newEnd newPos)
311−
310+ else
311+ oneOf
312− , -- term
312+ [ -- term
313− do newExpr <- possiblyNegativeTerm newStart
313+ do newExpr <- possiblyNegativeTerm newStart
314− newEnd <- getPosition
314+ newEnd <- getPosition
315− newPos <- W.whitespace
315+ newPos <- W.whitespace
316− let newOps = (toCall expr args, op) : ops
316+ let newOps = (toCall expr args, op) : ops
317− exprHelp start (State newOps newExpr [] newEnd newPos)
317+ exprHelp start (State newOps newExpr [] newEnd newPos)
318−
318+
319− , -- final term
319+ , -- final term
320− do (newLast, newEnd, newPos) <-
320+ do (newLast, newEnd, newPos) <-
321− oneOf
321+ oneOf
322− [ let_ newStart
322+ [ let_ newStart
323− , case_ newStart
323+ , case_ newStart
324− , if_ newStart
324+ , if_ newStart
325− , function newStart
325+ , function newStart
326− ]
326+ ]
327− let newOps = (toCall expr args, op) : ops
327+ let newOps = (toCall expr args, op) : ops
328− let finalExpr = A.at start newEnd (Src.Binops (reverse newOps) newLast)
328+ let finalExpr = A.at start newEnd (Src.Binops (reverse newOps) newLast)
329− return ( finalExpr, newEnd, newPos )
329+ return ( finalExpr, newEnd, newPos )
330− ]
330+ ]
331
331
332 , -- done
332 , -- done
333 let finalExpr = toCall expr args in
333 let finalExpr = toCall expr args in
compiler/src/Parse/Primitives/Internals.hs+1−9
@@ -12,7 +12,7 @@ module Parse.Primitives.Internals
12
12
13
13
14import Prelude hiding (length)
14import Prelude hiding (length)
15−import qualified Control.Applicative as Applicative ( Applicative(..), Alternative(..) )
15+import qualified Control.Applicative as Applicative (Applicative(..))
16import Control.Monad
16import Control.Monad
17import qualified Data.ByteString.Internal as B
17import qualified Data.ByteString.Internal as B
18import Foreign.ForeignPtr (ForeignPtr, withForeignPtr)
18import Foreign.ForeignPtr (ForeignPtr, withForeignPtr)
@@ -158,14 +158,6 @@ instance Applicative.Applicative Parser where
158 (<*>) = ap
158 (<*>) = ap
159
159
160
160
161−instance Applicative.Alternative Parser where
162− {-# INLINE empty #-}
163− empty = allTheOptionsFailed
164−
165− {-# INLINE (<|>) #-}
166− (<|>) = oneOfHelp
167−
168−
169oneOf :: [Parser a] -> Parser a
161oneOf :: [Parser a] -> Parser a
170oneOf parsers =
162oneOf parsers =
171 foldr oneOfHelp allTheOptionsFailed parsers
163 foldr oneOfHelp allTheOptionsFailed parsers