@@ -114,20 +114,32 @@ listHelp start entries =
114tuple :: R.Position -> Parser Src.RawExpr
114tuple :: R.Position -> Parser Src.RawExpr
115tuple start =
115tuple start =
116 do leftParen
116 do leftParen
117 inContext start E.ExprTuple $ oneOf $
119 inContext start E.ExprTuple $ oneOf $
120+ [ do noSpace pos spos
121+ try (minus >> rightParen)
123+ return $ mkBinop start end "-"
125+ , do checkSpace spos
126+ (entry, _, spos2) <- expression
128+ tupleHelp start [entry]
130+ , do noSpace pos spos
118− [ do op <- infixOp
131+ op <- infixOp
119 rightParen
132 rightParen
120 end <- getPosition
133 end <- getPosition
121− let x = A.at start end (Src.var "x")
134+ return $ mkBinop start end op
122− let y = A.at start end (Src.var "y")
123− return $ mkLambda start end "x" $ mkLambda start end "y" $
124− A.at start end (Src.Binop [(x, A.at start end op)] y)
136+ , do noSpace pos spos
126− , do rightParen
137+ rightParen
127 end <- getPosition
138 end <- getPosition
128 return (A.at start end (Src.tuple []))
139 return (A.at start end (Src.tuple []))
141+ , do noSpace pos spos
130− , do comma
142+ comma
131 arity <- chompCommas 2
143 arity <- chompCommas 2
132 rightParen
144 rightParen
133 end <- getPosition
145 end <- getPosition
@@ -135,11 +147,6 @@ tuple start =
135 let ann x = A.at start end x
147 let ann x = A.at start end x
136 let result = ann (Src.tuple (map (ann . Src.var) args))
148 let result = ann (Src.tuple (map (ann . Src.var) args))
137 return (foldr (mkLambda start end) result args)
149 return (foldr (mkLambda start end) result args)
140− (entry, _, pos) <- expression
142− tupleHelp start [entry]
@@ -148,6 +155,16 @@ mkLambda start end arg body =
148 A.at start end (Src.Lambda (A.at start end (P.Var arg)) body)
155 A.at start end (Src.Lambda (A.at start end (P.Var arg)) body)
158+mkBinop :: R.Position -> R.Position -> Text -> Src.RawExpr
159+mkBinop start end op =
161+ x = A.at start end (Src.var "x")
162+ y = A.at start end (Src.var "y")
164+ mkLambda start end "x" $ mkLambda start end "y" $
165+ A.at start end (Src.Binop [(x, A.at start end op)] y)
151chompCommas :: Int -> Parser Int
168chompCommas :: Int -> Parser Int
152chompCommas n =
169chompCommas n =