@@ -470,8 +470,8 @@ bracketed' open syn =
470 <|> try (dependentPair TypeOrTerm [] open syn)
470 <|> try (dependentPair TypeOrTerm [] open syn)
471 <|> try (do fc <- getFC
471 <|> try (do fc <- getFC
472 opName <- operatorName
472 opName <- operatorName
473− -- No prefix operators! (bit of a hack here...)
473+ guardNotPrefix opName
474− guard $ opName /= sUN "-" && opName /= sUN "!"
474+
475 e <- expr syn
475 e <- expr syn
476 lchar ')'
476 lchar ')'
477 return $ PLam fc (sMN 1000 "ARG") NoFC Placeholder
477 return $ PLam fc (sMN 1000 "ARG") NoFC Placeholder
@@ -492,6 +492,18 @@ bracketed' open syn =
492 operatorName = sUN <$> operator
492 operatorName = sUN <$> operator
493 <|> fst <$> between (lchar '`') (lchar '`') fnName
493 <|> fst <$> between (lchar '`') (lchar '`') fnName
495+ justPrefix :: FixDecl -> Maybe Name
496+ justPrefix (Fix (PrefixN _) opName) = Just (sUN opName)
497+ justPrefix _ = Nothing
499+ guardNotPrefix :: Name -> IdrisParser ()
500+ guardNotPrefix opName = do
501+ guard $ opName /= sUN "-"
502+ guard $ opName /= sUN "!"
504+ ops <- idris_infixes <$> get
505+ guard . not . (opName `elem`) . mapMaybe justPrefix $ ops
495{-| Parses the rest of a dependent pair after '(' or '(Expr **' -}
507{-| Parses the rest of a dependent pair after '(' or '(Expr **' -}
496dependentPair :: PunInfo -> [(PTerm, Maybe (FC, PTerm), FC)] -> FC -> SyntaxInfo -> IdrisParser PTerm
508dependentPair :: PunInfo -> [(PTerm, Maybe (FC, PTerm), FC)] -> FC -> SyntaxInfo -> IdrisParser PTerm
497dependentPair pun prev openFC syn =
509dependentPair pun prev openFC syn =