@@ -537,7 +537,7 @@ data PTerm = PQuote Raw
537537 | PEq FC PTerm PTerm
538538 | PPair FC PTerm PTerm
539539 | PDPair FC PTerm PTerm PTerm
540− | PAlternative [PTerm]
540+ | PAlternative Bool [PTerm] -- True if only one may work
541541 | PHidden PTerm -- irrelevant or hidden pattern
542542 | PSet
543543 | PConstant Const
@@ -566,7 +566,7 @@ mapPT f t = f (mpt t) where
566566 mpt (PTyped l r) = PTyped (mapPT f l) (mapPT f r)
567567 mpt (PPair fc l r) = PPair fc (mapPT f l) (mapPT f r)
568568 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)
570570 mpt (PHidden t) = PHidden (mapPT f t)
571571 mpt (PDoBlock ds) = PDoBlock (map (fmap (mapPT f)) ds)
572572 mpt (PProof ts) = PProof (map (fmap (mapPT f)) ts)
@@ -964,7 +964,7 @@ prettyImp impl = prettySe 10
964964 prettySe 10 r <> rparen
965965 else
966966 lparen <> prettySe 10 l <+> text "**" <+> prettySe 10 r <> rparen
967− prettySe p (PAlternative as) =
967+ prettySe p (PAlternative a as) =
968968 lparen <> text "|" <> prettyAs <> text "|" <> rparen
969969 where
970970 prettyAs =
@@ -1056,7 +1056,7 @@ showImp impl tm = se 10 tm where
10561056 se p (PTyped l r) = "(" ++ se 10 l ++ " : " ++ se 10 r ++ ")"
10571057 se p (PPair _ l r) = "(" ++ se 10 l ++ ", " ++ se 10 r ++ ")"
10581058 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) ++ "|)"
10601060 se p PSet = "Set"
10611061 se p (PConstant c) = show c
10621062 se p (PProof ts) = "proof { " ++ show ts ++ "}"
@@ -1129,7 +1129,7 @@ instance Sized PTerm where
11291129 size (PEq fc left right) = 1 + size left + size right
11301130 size (PPair fc left right) = 1 + size left + size right
11311131 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
11331133 size (PHidden hidden) = size hidden
11341134 size PSet = 1
11351135 size (PConstant const) = 1 + size const
@@ -1157,7 +1157,7 @@ allNamesIn tm = nub $ ni [] tm
11571157 ni env (PPair _ l r) = ni env l ++ ni env r
11581158 ni env (PDPair _ (PRef _ n) t r) = ni env t ++ ni (n:env) r
11591159 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
11611161 ni env _ = []
11621162
11631163namesIn :: [(Name, PTerm)] -> IState -> PTerm -> [Name]
@@ -1177,7 +1177,7 @@ namesIn uvars ist tm = nub $ ni [] tm
11771177 ni env (PPair _ l r) = ni env l ++ ni env r
11781178 ni env (PDPair _ (PRef _ n) t r) = ni env t ++ ni (n:env) r
11791179 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
11811181 ni env (PHidden tm) = ni env tm
11821182 ni env _ = []
11831183
@@ -1288,7 +1288,7 @@ expandParams dec ps ns tm = en tm
12881288 en (PTyped l r) = PTyped (en l) (en r)
12891289 en (PPair f l r) = PPair f (en l) (en r)
12901290 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)
12921292 en (PHidden t) = PHidden (en t)
12931293 en (PDoBlock ds) = PDoBlock (map (fmap en) ds)
12941294 en (PProof ts) = PProof (map (fmap en) ts)
@@ -1364,7 +1364,7 @@ getPriority i tm = pri tm
13641364 pri (PTyped l r) = pri l
13651365 pri (PPair _ l r) = max 1 (max (pri l) (pri r))
13661366 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)
13681368 pri (PConstant _) = 0
13691369 pri Placeholder = 1
13701370 pri _ = 3
@@ -1480,7 +1480,7 @@ implicitise syn ist tm
14801480 let isn = namesIn uvars ist l ++ namesIn uvars ist t ++
14811481 namesIn uvars ist r
14821482 put (decls, nub (ns ++ (isn \\ (env ++ map fst (getImps decls)))))
1483− imps top env (PAlternative as)
1483+ imps top env (PAlternative a as)
14841484 = do (decls, ns) <- get
14851485 let isn = concatMap (namesIn uvars ist) as
14861486 put (decls, nub (ns ++ (isn `dropAll` (env ++ map fst (getImps decls)))))
@@ -1529,8 +1529,8 @@ addImpl' inpat env ist ptm = ai env ptm
15291529 t' = ai env t
15301530 r' = ai env r in
15311531 PDPair fc l' t' r'
1532− ai env (PAlternative as) = let as' = map (ai env) as in
1533− PAlternative as'
1532+ ai env (PAlternative a as) = let as' = map (ai env) as in
1533+ PAlternative a as'
15341534 ai env (PApp fc (PRef _ f) as)
15351535 | not (f `elem` env)
15361536 = let as' = map (fmap (ai env)) as in
@@ -1582,7 +1582,7 @@ aiFn inpat ist fc f as
15821582 then Right $ PApp fc (PRef fc f) as
15831583 else Right $ mkPApp fc (length as) (PRef fc f) as
15841584 alts -> Right $
1585− PAlternative $
1585+ PAlternative True $
15861586 map (\(f', ns) -> mkPApp fc (length ns) (PRef fc f')
15871587 (insertImpl ns as)) alts
15881588 where
@@ -1727,10 +1727,10 @@ matchClause' names i x y = checkRpts $ match (fullApp x) (fullApp y) where
17271727 mt <- match' t t'
17281728 mr <- match' r r'
17291729 return (ml ++ mt ++ mr)
1730− match (PAlternative as) (PAlternative as')
1730+ match (PAlternative a as) (PAlternative a' as')
17311731 = do ms <- zipWithM match' as as'
17321732 return (concat ms)
1733− match a@(PAlternative as) b
1733+ match a@(PAlternative _ as) b
17341734 = do let ms = zipWith match' as (repeat b)
17351735 case (rights (map toEither ms)) of
17361736 (x: _) -> return x
@@ -1786,7 +1786,7 @@ substMatch n tm t = sm t where
17861786 sm (PTyped x y) = PTyped (sm x) (sm y)
17871787 sm (PPair f x y) = PPair f (sm x) (sm y)
17881788 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)
17901790 sm (PHidden x) = PHidden (sm x)
17911791 sm x = x
17921792
@@ -1801,7 +1801,7 @@ shadow n n' t = sm t where
18011801 sm (PTyped x y) = PTyped (sm x) (sm y)
18021802 sm (PPair f x y) = PPair f (sm x) (sm y)
18031803 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)
18051805 sm (PHidden x) = PHidden (sm x)
18061806 sm x = x
18071807