@@ -6,8 +6,6 @@ module Parse.Expression
9−import Control.Monad (guard)
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) $
305− do guard ("-" == opName && end /= opStart && opEnd == newStart)
302+ if "-" == opName && end /= opStart && opEnd == newStart
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)
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)
319− , -- final term
319+ , -- final term
320− do (newLast, newEnd, newPos) <-
320+ do (newLast, newEnd, newPos) <-
322− [ let_ newStart
322+ [ let_ newStart
323− , case_ newStart
323+ , case_ newStart
324− , if_ newStart
324+ , if_ newStart
325− , function newStart
325+ , function newStart
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 )
332 , -- done
332 , -- done
333 let finalExpr = toCall expr args in
333 let finalExpr = toCall expr args in