@@ -537,7 +537,7 @@ data PTerm = PQuote Raw
537 | PEq FC PTerm PTerm
537 | PEq FC PTerm PTerm
538 | PPair FC PTerm PTerm
538 | PPair FC PTerm PTerm
539 | PDPair FC PTerm PTerm PTerm
539 | PDPair FC PTerm PTerm PTerm
540− | PAlternative [PTerm]
540+ | PAlternative Bool [PTerm] -- True if only one may work
541 | PHidden PTerm -- irrelevant or hidden pattern
541 | PHidden PTerm -- irrelevant or hidden pattern
543 | PConstant Const
543 | PConstant Const
@@ -566,7 +566,7 @@ mapPT f t = f (mpt t) where
566 mpt (PTyped l r) = PTyped (mapPT f l) (mapPT f r)
566 mpt (PTyped l r) = PTyped (mapPT f l) (mapPT f r)
567 mpt (PPair fc l r) = PPair fc (mapPT f l) (mapPT f r)
567 mpt (PPair fc l r) = PPair fc (mapPT f l) (mapPT f r)
568 mpt (PDPair fc l t r) = PDPair fc (mapPT f l) (mapPT f t) (mapPT f r)
568 mpt (PDPair fc l t r) = PDPair fc (mapPT f l) (mapPT f t) (mapPT f r)
569− mpt (PAlternative as) = PAlternative (map (mapPT f) as)
569+ mpt (PAlternative a as) = PAlternative a (map (mapPT f) as)
570 mpt (PHidden t) = PHidden (mapPT f t)
570 mpt (PHidden t) = PHidden (mapPT f t)
571 mpt (PDoBlock ds) = PDoBlock (map (fmap (mapPT f)) ds)
571 mpt (PDoBlock ds) = PDoBlock (map (fmap (mapPT f)) ds)
572 mpt (PProof ts) = PProof (map (fmap (mapPT f)) ts)
572 mpt (PProof ts) = PProof (map (fmap (mapPT f)) ts)
@@ -964,7 +964,7 @@ prettyImp impl = prettySe 10
964 prettySe 10 r <> rparen
964 prettySe 10 r <> rparen
966 lparen <> prettySe 10 l <+> text "**" <+> prettySe 10 r <> rparen
966 lparen <> prettySe 10 l <+> text "**" <+> prettySe 10 r <> rparen
967− prettySe p (PAlternative as) =
967+ prettySe p (PAlternative a as) =
968 lparen <> text "|" <> prettyAs <> text "|" <> rparen
968 lparen <> text "|" <> prettyAs <> text "|" <> rparen
970 prettyAs =
970 prettyAs =
@@ -1056,7 +1056,7 @@ showImp impl tm = se 10 tm where
1056 se p (PTyped l r) = "(" ++ se 10 l ++ " : " ++ se 10 r ++ ")"
1056 se p (PTyped l r) = "(" ++ se 10 l ++ " : " ++ se 10 r ++ ")"
1057 se p (PPair _ l r) = "(" ++ se 10 l ++ ", " ++ se 10 r ++ ")"
1057 se p (PPair _ l r) = "(" ++ se 10 l ++ ", " ++ se 10 r ++ ")"
1058 se p (PDPair _ l t r) = "(" ++ se 10 l ++ " ** " ++ se 10 r ++ ")"
1058 se p (PDPair _ l t r) = "(" ++ se 10 l ++ " ** " ++ se 10 r ++ ")"
1059− se p (PAlternative as) = "(|" ++ showSep " , " (map (se 10) as) ++ "|)"
1059+ se p (PAlternative a as) = "(|" ++ showSep " , " (map (se 10) as) ++ "|)"
1060 se p PSet = "Set"
1060 se p PSet = "Set"
1061 se p (PConstant c) = show c
1061 se p (PConstant c) = show c
1062 se p (PProof ts) = "proof { " ++ show ts ++ "}"
1062 se p (PProof ts) = "proof { " ++ show ts ++ "}"
@@ -1129,7 +1129,7 @@ instance Sized PTerm where
1129 size (PEq fc left right) = 1 + size left + size right
1129 size (PEq fc left right) = 1 + size left + size right
1130 size (PPair fc left right) = 1 + size left + size right
1130 size (PPair fc left right) = 1 + size left + size right
1131 size (PDPair fs left ty right) = 1 + size left + size ty + size right
1131 size (PDPair fs left ty right) = 1 + size left + size ty + size right
1132− size (PAlternative alts) = 1 + size alts
1132+ size (PAlternative a alts) = 1 + size alts
1133 size (PHidden hidden) = size hidden
1133 size (PHidden hidden) = size hidden
1134 size PSet = 1
1134 size PSet = 1
1135 size (PConstant const) = 1 + size const
1135 size (PConstant const) = 1 + size const
@@ -1157,7 +1157,7 @@ allNamesIn tm = nub $ ni [] tm
1157 ni env (PPair _ l r) = ni env l ++ ni env r
1157 ni env (PPair _ l r) = ni env l ++ ni env r
1158 ni env (PDPair _ (PRef _ n) t r) = ni env t ++ ni (n:env) r
1158 ni env (PDPair _ (PRef _ n) t r) = ni env t ++ ni (n:env) r
1159 ni env (PDPair _ l t r) = ni env l ++ ni env t ++ ni env r
1159 ni env (PDPair _ l t r) = ni env l ++ ni env t ++ ni env r
1160− ni env (PAlternative ls) = concatMap (ni env) ls
1160+ ni env (PAlternative a ls) = concatMap (ni env) ls
1161 ni env _ = []
1161 ni env _ = []
1163namesIn :: [(Name, PTerm)] -> IState -> PTerm -> [Name]
1163namesIn :: [(Name, PTerm)] -> IState -> PTerm -> [Name]
@@ -1177,7 +1177,7 @@ namesIn uvars ist tm = nub $ ni [] tm
1177 ni env (PPair _ l r) = ni env l ++ ni env r
1177 ni env (PPair _ l r) = ni env l ++ ni env r
1178 ni env (PDPair _ (PRef _ n) t r) = ni env t ++ ni (n:env) r
1178 ni env (PDPair _ (PRef _ n) t r) = ni env t ++ ni (n:env) r
1179 ni env (PDPair _ l t r) = ni env l ++ ni env t ++ ni env r
1179 ni env (PDPair _ l t r) = ni env l ++ ni env t ++ ni env r
1180− ni env (PAlternative as) = concatMap (ni env) as
1180+ ni env (PAlternative a as) = concatMap (ni env) as
1181 ni env (PHidden tm) = ni env tm
1181 ni env (PHidden tm) = ni env tm
1182 ni env _ = []
1182 ni env _ = []
@@ -1288,7 +1288,7 @@ expandParams dec ps ns tm = en tm
1288 en (PTyped l r) = PTyped (en l) (en r)
1288 en (PTyped l r) = PTyped (en l) (en r)
1289 en (PPair f l r) = PPair f (en l) (en r)
1289 en (PPair f l r) = PPair f (en l) (en r)
1290 en (PDPair f l t r) = PDPair f (en l) (en t) (en r)
1290 en (PDPair f l t r) = PDPair f (en l) (en t) (en r)
1291− en (PAlternative as) = PAlternative (map en as)
1291+ en (PAlternative a as) = PAlternative a (map en as)
1292 en (PHidden t) = PHidden (en t)
1292 en (PHidden t) = PHidden (en t)
1293 en (PDoBlock ds) = PDoBlock (map (fmap en) ds)
1293 en (PDoBlock ds) = PDoBlock (map (fmap en) ds)
1294 en (PProof ts) = PProof (map (fmap en) ts)
1294 en (PProof ts) = PProof (map (fmap en) ts)
@@ -1364,7 +1364,7 @@ getPriority i tm = pri tm
1364 pri (PTyped l r) = pri l
1364 pri (PTyped l r) = pri l
1365 pri (PPair _ l r) = max 1 (max (pri l) (pri r))
1365 pri (PPair _ l r) = max 1 (max (pri l) (pri r))
1366 pri (PDPair _ l t r) = max 1 (max (pri l) (max (pri t) (pri r)))
1366 pri (PDPair _ l t r) = max 1 (max (pri l) (max (pri t) (pri r)))
1367− pri (PAlternative as) = maximum (map pri as)
1367+ pri (PAlternative a as) = maximum (map pri as)
1368 pri (PConstant _) = 0
1368 pri (PConstant _) = 0
1369 pri Placeholder = 1
1369 pri Placeholder = 1
1370 pri _ = 3
1370 pri _ = 3
@@ -1480,7 +1480,7 @@ implicitise syn ist tm
1480 let isn = namesIn uvars ist l ++ namesIn uvars ist t ++
1480 let isn = namesIn uvars ist l ++ namesIn uvars ist t ++
1481 namesIn uvars ist r
1481 namesIn uvars ist r
1482 put (decls, nub (ns ++ (isn \\ (env ++ map fst (getImps decls)))))
1482 put (decls, nub (ns ++ (isn \\ (env ++ map fst (getImps decls)))))
1483− imps top env (PAlternative as)
1483+ imps top env (PAlternative a as)
1484 = do (decls, ns) <- get
1484 = do (decls, ns) <- get
1485 let isn = concatMap (namesIn uvars ist) as
1485 let isn = concatMap (namesIn uvars ist) as
1486 put (decls, nub (ns ++ (isn `dropAll` (env ++ map fst (getImps decls)))))
1486 put (decls, nub (ns ++ (isn `dropAll` (env ++ map fst (getImps decls)))))
@@ -1529,8 +1529,8 @@ addImpl' inpat env ist ptm = ai env ptm
1529 t' = ai env t
1529 t' = ai env t
1530 r' = ai env r in
1530 r' = ai env r in
1531 PDPair fc l' t' r'
1531 PDPair fc l' t' r'
1532− ai env (PAlternative as) = let as' = map (ai env) as in
1532+ ai env (PAlternative a as) = let as' = map (ai env) as in
1533− PAlternative as'
1533+ PAlternative a as'
1534 ai env (PApp fc (PRef _ f) as)
1534 ai env (PApp fc (PRef _ f) as)
1535 | not (f `elem` env)
1535 | not (f `elem` env)
1536 = let as' = map (fmap (ai env)) as in
1536 = let as' = map (fmap (ai env)) as in
@@ -1582,7 +1582,7 @@ aiFn inpat ist fc f as
1582 then Right $ PApp fc (PRef fc f) as
1582 then Right $ PApp fc (PRef fc f) as
1583 else Right $ mkPApp fc (length as) (PRef fc f) as
1583 else Right $ mkPApp fc (length as) (PRef fc f) as
1584 alts -> Right $
1584 alts -> Right $
1585− PAlternative $
1585+ PAlternative True $
1586 map (\(f', ns) -> mkPApp fc (length ns) (PRef fc f')
1586 map (\(f', ns) -> mkPApp fc (length ns) (PRef fc f')
1587 (insertImpl ns as)) alts
1587 (insertImpl ns as)) alts
@@ -1727,10 +1727,10 @@ matchClause' names i x y = checkRpts $ match (fullApp x) (fullApp y) where
1727 mt <- match' t t'
1727 mt <- match' t t'
1728 mr <- match' r r'
1728 mr <- match' r r'
1729 return (ml ++ mt ++ mr)
1729 return (ml ++ mt ++ mr)
1730− match (PAlternative as) (PAlternative as')
1730+ match (PAlternative a as) (PAlternative a' as')
1731 = do ms <- zipWithM match' as as'
1731 = do ms <- zipWithM match' as as'
1732 return (concat ms)
1732 return (concat ms)
1733− match a@(PAlternative as) b
1733+ match a@(PAlternative _ as) b
1734 = do let ms = zipWith match' as (repeat b)
1734 = do let ms = zipWith match' as (repeat b)
1735 case (rights (map toEither ms)) of
1735 case (rights (map toEither ms)) of
1736 (x: _) -> return x
1736 (x: _) -> return x
@@ -1786,7 +1786,7 @@ substMatch n tm t = sm t where
1786 sm (PTyped x y) = PTyped (sm x) (sm y)
1786 sm (PTyped x y) = PTyped (sm x) (sm y)
1787 sm (PPair f x y) = PPair f (sm x) (sm y)
1787 sm (PPair f x y) = PPair f (sm x) (sm y)
1788 sm (PDPair f x t y) = PDPair f (sm x) (sm t) (sm y)
1788 sm (PDPair f x t y) = PDPair f (sm x) (sm t) (sm y)
1789− sm (PAlternative as) = PAlternative (map sm as)
1789+ sm (PAlternative a as) = PAlternative a (map sm as)
1790 sm (PHidden x) = PHidden (sm x)
1790 sm (PHidden x) = PHidden (sm x)
1791 sm x = x
1791 sm x = x
@@ -1801,7 +1801,7 @@ shadow n n' t = sm t where
1801 sm (PTyped x y) = PTyped (sm x) (sm y)
1801 sm (PTyped x y) = PTyped (sm x) (sm y)
1802 sm (PPair f x y) = PPair f (sm x) (sm y)
1802 sm (PPair f x y) = PPair f (sm x) (sm y)
1803 sm (PDPair f x t y) = PDPair f (sm x) (sm t) (sm y)
1803 sm (PDPair f x t y) = PDPair f (sm x) (sm t) (sm y)
1804− sm (PAlternative as) = PAlternative (map sm as)
1804+ sm (PAlternative a as) = PAlternative a (map sm as)
1805 sm (PHidden x) = PHidden (sm x)
1805 sm (PHidden x) = PHidden (sm x)
1806 sm x = x
1806 sm x = x