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