on master help sign in
Fixed interaction of expressions with operators and external syntax
13073a1Ahmad Salim Al-Sibahi
src/Idris/ParseHelpers.hs+8−1
@@ -323,10 +323,17 @@ opChars = ":!#$%&*+./<=>?@\\^|-~"
323operatorLetter :: MonadicParsing m => m Char
323operatorLetter :: MonadicParsing m => m Char
324operatorLetter = oneOf opChars
324operatorLetter = oneOf opChars
325
325
326+
327+commentMarkers :: [String]
328+commentMarkers = [ "--", "|||" ]
329+
330+invalidOperators :: [String]
331+invalidOperators = [":", "=>", "->", "<-", "=", "?=", "|", "**", "==>", "\\"]
332+
326-- | Parses an operator
333-- | Parses an operator
327operator :: MonadicParsing m => m String
334operator :: MonadicParsing m => m String
328operator = do op <- token . some $ operatorLetter
335operator = do op <- token . some $ operatorLetter
329− when (op `elem` [":", "=>", "->", "<-", "=", "?=", "|", "**", "==>", "\\", ",", "--", "|||"]) $
336+ when (op `elem` (invalidOperators ++ commentMarkers)) $
330 fail $ op ++ " is not a valid operator"
337 fail $ op ++ " is not a valid operator"
331 return op
338 return op
332
339
src/Idris/Parser.hs+4
@@ -291,6 +291,10 @@ syntaxRule syn
291
291
292 mkSimple' (Expr e : Expr e1 : es) = SimpleExpr e : SimpleExpr e1 :
292 mkSimple' (Expr e : Expr e1 : es) = SimpleExpr e : SimpleExpr e1 :
293 mkSimple es
293 mkSimple es
294+ -- Can't parse a full expression followed by operator like characters due to ambiguity
295+ mkSimple' (Expr e : Symbol s : es)
296+ | takeWhile (`elem` opChars) ts /= "" && ts `notElem` invalidOperators = SimpleExpr e : Symbol s : mkSimple' es
297+ where ts = dropWhile isSpace . dropWhileEnd isSpace $ s
294 mkSimple' (e : es) = e : mkSimple' es
298 mkSimple' (e : es) = e : mkSimple' es
295 mkSimple' [] = []
299 mkSimple' [] = []
296
300