@@ -1024,7 +1024,9 @@ data PTerm = PQuote Raw -- ^ Inclusion of a core term into the high-level langua
1024 | PCase FC PTerm [(PTerm, PTerm)] -- ^ A case expression. Args are source location, scrutinee, and a list of pattern/RHS pairs
1024 | PCase FC PTerm [(PTerm, PTerm)] -- ^ A case expression. Args are source location, scrutinee, and a list of pattern/RHS pairs
1025 | PTrue FC PunInfo -- ^ Unit type..?
1025 | PTrue FC PunInfo -- ^ Unit type..?
1026 | PResolveTC FC -- ^ Solve this dictionary by type class resolution
1026 | PResolveTC FC -- ^ Solve this dictionary by type class resolution
1027− | PRewrite FC PTerm PTerm (Maybe PTerm) -- ^ "rewrite" syntax, with optional result type
1027+ | PRewrite FC (Maybe Name) PTerm PTerm (Maybe PTerm)
1028+ -- ^ "rewrite" syntax, with optional rewriting function
1029+ -- and optional result type
1028 | PPair FC [FC] PunInfo PTerm PTerm -- ^ A pair (a, b) and whether it's a product type or a pair (solved by elaboration). The list of FCs is its punctuation.
1030 | PPair FC [FC] PunInfo PTerm PTerm -- ^ A pair (a, b) and whether it's a product type or a pair (solved by elaboration). The list of FCs is its punctuation.
1029 | PDPair FC [FC] PunInfo PTerm PTerm PTerm -- ^ A dependent pair (tm : a ** b) and whether it's a sigma type or a pair that inhabits one (solved by elaboration). The [FC] is its punctuation.
1031 | PDPair FC [FC] PunInfo PTerm PTerm PTerm -- ^ A dependent pair (tm : a ** b) and whether it's a sigma type or a pair that inhabits one (solved by elaboration). The [FC] is its punctuation.
1030 | PAs FC Name PTerm -- ^ @-pattern, valid LHS only
1032 | PAs FC Name PTerm -- ^ @-pattern, valid LHS only
@@ -1080,7 +1082,7 @@ mapPTermFC f g (PIfThenElse fc t1 t2 t3) = PIfThenElse (f fc) (mapPTermFC f
1080mapPTermFC f g (PCase fc t cases) = PCase (f fc) (mapPTermFC f g t) (map (\(l,r) -> (mapPTermFC f g l, mapPTermFC f g r)) cases)
1082mapPTermFC f g (PCase fc t cases) = PCase (f fc) (mapPTermFC f g t) (map (\(l,r) -> (mapPTermFC f g l, mapPTermFC f g r)) cases)
1081mapPTermFC f g (PTrue fc info) = PTrue (f fc) info
1083mapPTermFC f g (PTrue fc info) = PTrue (f fc) info
1082mapPTermFC f g (PResolveTC fc) = PResolveTC (f fc)
1084mapPTermFC f g (PResolveTC fc) = PResolveTC (f fc)
1083−mapPTermFC f g (PRewrite fc t1 t2 t3) = PRewrite (f fc) (mapPTermFC f g t1) (mapPTermFC f g t2) (fmap (mapPTermFC f g) t3)
1085+mapPTermFC f g (PRewrite fc by t1 t2 t3) = PRewrite (f fc) by (mapPTermFC f g t1) (mapPTermFC f g t2) (fmap (mapPTermFC f g) t3)
1084mapPTermFC f g (PPair fc hls info t1 t2) = PPair (f fc) (map g hls) info (mapPTermFC f g t1) (mapPTermFC f g t2)
1086mapPTermFC f g (PPair fc hls info t1 t2) = PPair (f fc) (map g hls) info (mapPTermFC f g t1) (mapPTermFC f g t2)
1085mapPTermFC f g (PDPair fc hls info t1 t2 t3) = PDPair (f fc) (map g hls) info (mapPTermFC f g t1) (mapPTermFC f g t2) (mapPTermFC f g t3)
1087mapPTermFC f g (PDPair fc hls info t1 t2 t3) = PDPair (f fc) (map g hls) info (mapPTermFC f g t1) (mapPTermFC f g t2) (mapPTermFC f g t3)
1086mapPTermFC f g (PAs fc n t) = PAs (f fc) n (mapPTermFC f g t)
1088mapPTermFC f g (PAs fc n t) = PAs (f fc) n (mapPTermFC f g t)
@@ -1125,7 +1127,7 @@ mapPT f t = f (mpt t) where
1125 mpt (PLam fc n nfc t s) = PLam fc n nfc (mapPT f t) (mapPT f s)
1127 mpt (PLam fc n nfc t s) = PLam fc n nfc (mapPT f t) (mapPT f s)
1126 mpt (PPi p n nfc t s) = PPi p n nfc (mapPT f t) (mapPT f s)
1128 mpt (PPi p n nfc t s) = PPi p n nfc (mapPT f t) (mapPT f s)
1127 mpt (PLet fc n nfc ty v s) = PLet fc n nfc (mapPT f ty) (mapPT f v) (mapPT f s)
1129 mpt (PLet fc n nfc ty v s) = PLet fc n nfc (mapPT f ty) (mapPT f v) (mapPT f s)
1128− mpt (PRewrite fc t s g) = PRewrite fc (mapPT f t) (mapPT f s) (fmap (mapPT f) g)
1130+ mpt (PRewrite fc by t s g) = PRewrite fc by (mapPT f t) (mapPT f s) (fmap (mapPT f) g)
1129 mpt (PApp fc t as) = PApp fc (mapPT f t) (map (fmap (mapPT f)) as)
1131 mpt (PApp fc t as) = PApp fc (mapPT f t) (map (fmap (mapPT f)) as)
1130 mpt (PWithApp fc t a) = PWithApp fc (mapPT f t) (mapPT f a)
1132 mpt (PWithApp fc t a) = PWithApp fc (mapPT f t) (mapPT f a)
1131 mpt (PAppBind fc t as) = PAppBind fc (mapPT f t) (map (fmap (mapPT f)) as)
1133 mpt (PAppBind fc t as) = PAppBind fc (mapPT f t) (map (fmap (mapPT f)) as)
@@ -1302,7 +1304,7 @@ highestFC (PCase fc _ _) = Just fc
1302highestFC (PIfThenElse fc _ _ _) = Just fc
1304highestFC (PIfThenElse fc _ _ _) = Just fc
1303highestFC (PTrue fc _) = Just fc
1305highestFC (PTrue fc _) = Just fc
1304highestFC (PResolveTC fc) = Just fc
1306highestFC (PResolveTC fc) = Just fc
1305−highestFC (PRewrite fc _ _ _) = Just fc
1307+highestFC (PRewrite fc _ _ _ _) = Just fc
1306highestFC (PPair fc _ _ _ _) = Just fc
1308highestFC (PPair fc _ _ _ _) = Just fc
1307highestFC (PDPair fc _ _ _ _ _) = Just fc
1309highestFC (PDPair fc _ _ _ _ _) = Just fc
1308highestFC (PAs fc _ _) = Just fc
1310highestFC (PAs fc _ _) = Just fc
@@ -1882,9 +1884,14 @@ pprintPTerm ppo bnd docArgs infixes = prettySe (ppopt_depth ppo) startPrec bnd
1882 prettySe d p bnd (PTrue _ IsType) = annName unitTy $ text "()"
1884 prettySe d p bnd (PTrue _ IsType) = annName unitTy $ text "()"
1883 prettySe d p bnd (PTrue _ IsTerm) = annName unitCon $ text "()"
1885 prettySe d p bnd (PTrue _ IsTerm) = annName unitCon $ text "()"
1884 prettySe d p bnd (PTrue _ TypeOrTerm) = text "()"
1886 prettySe d p bnd (PTrue _ TypeOrTerm) = text "()"
1885− prettySe d p bnd (PRewrite _ l r _) =
1887+ prettySe d p bnd (PRewrite _ by l r _) =
1886 depth d . bracket p startPrec $
1888 depth d . bracket p startPrec $
1887− text "rewrite" <+> prettySe (decD d) (startPrec + 1) bnd l <+> text "in" <+> prettySe (decD d) startPrec bnd r
1889+ text "rewrite" <+> prettySe (decD d) (startPrec + 1) bnd l
1892+ Just fn -> text "using" <+>
1893+ prettyName True (ppopt_impl ppo) bnd fn) <+>
1894+ text "in" <+> prettySe (decD d) startPrec bnd r
1888 prettySe d p bnd (PTyped l r) =
1895 prettySe d p bnd (PTyped l r) =
1889 lparen <> prettySe (decD d) startPrec bnd l <+> colon <+> prettySe (decD d) startPrec bnd r <> rparen
1896 lparen <> prettySe (decD d) startPrec bnd l <+> colon <+> prettySe (decD d) startPrec bnd r <> rparen
1890 prettySe d p bnd pair@(PPair _ _ pun _ _) -- flatten tuples to the right, like parser
1897 prettySe d p bnd pair@(PPair _ _ pun _ _) -- flatten tuples to the right, like parser
@@ -2247,7 +2254,7 @@ instance Sized PTerm where
2247 size (PIfThenElse fc c t f) = 1 + sum (map size [c, t, f])
2254 size (PIfThenElse fc c t f) = 1 + sum (map size [c, t, f])
2248 size (PTrue fc _) = 1
2255 size (PTrue fc _) = 1
2249 size (PResolveTC fc) = 1
2256 size (PResolveTC fc) = 1
2250− size (PRewrite fc left right _) = 1 + size left + size right
2257+ size (PRewrite fc by left right _) = 1 + size left + size right
2251 size (PPair fc _ _ left right) = 1 + size left + size right
2258 size (PPair fc _ _ left right) = 1 + size left + size right
2252 size (PDPair fs _ _ left ty right) = 1 + size left + size ty + size right
2259 size (PDPair fs _ _ left ty right) = 1 + size left + size ty + size right
2253 size (PAlternative _ a alts) = 1 + size alts
2260 size (PAlternative _ a alts) = 1 + size alts
@@ -2288,7 +2295,7 @@ allNamesIn tm = nub $ ni 0 [] tm
2288 ni 0 env (PPi p n _ ty sc) = niTacImp 0 env p ++ ni 0 env ty ++ ni 0 (n:env) sc
2295 ni 0 env (PPi p n _ ty sc) = niTacImp 0 env p ++ ni 0 env ty ++ ni 0 (n:env) sc
2289 ni 0 env (PLet _ n _ ty val sc) = ni 0 env ty ++ ni 0 env val ++ ni 0 (n:env) sc
2296 ni 0 env (PLet _ n _ ty val sc) = ni 0 env ty ++ ni 0 env val ++ ni 0 (n:env) sc
2290 ni 0 env (PHidden tm) = ni 0 env tm
2297 ni 0 env (PHidden tm) = ni 0 env tm
2291− ni 0 env (PRewrite _ l r _) = ni 0 env l ++ ni 0 env r
2298+ ni 0 env (PRewrite _ _ l r _) = ni 0 env l ++ ni 0 env r
2292 ni 0 env (PTyped l r) = ni 0 env l ++ ni 0 env r
2299 ni 0 env (PTyped l r) = ni 0 env l ++ ni 0 env r
2293 ni 0 env (PPair _ _ _ l r) = ni 0 env l ++ ni 0 env r
2300 ni 0 env (PPair _ _ _ l r) = ni 0 env l ++ ni 0 env r
2294 ni 0 env (PDPair _ _ _ (PRef _ _ n) Placeholder r) = n : ni 0 env r
2301 ni 0 env (PDPair _ _ _ (PRef _ _ n) Placeholder r) = n : ni 0 env r
@@ -2319,7 +2326,7 @@ boundNamesIn tm = S.toList (ni 0 S.empty tm)
2319 ni 0 set (PLam fc n _ ty sc) = S.insert n $ ni 0 (ni 0 set ty) sc
2326 ni 0 set (PLam fc n _ ty sc) = S.insert n $ ni 0 (ni 0 set ty) sc
2320 ni 0 set (PLet fc n nfc ty val sc) = S.insert n $ ni 0 (ni 0 (ni 0 set ty) val) sc
2327 ni 0 set (PLet fc n nfc ty val sc) = S.insert n $ ni 0 (ni 0 (ni 0 set ty) val) sc
2321 ni 0 set (PPi p n _ ty sc) = niTacImp 0 (S.insert n $ ni 0 (ni 0 set ty) sc) p
2328 ni 0 set (PPi p n _ ty sc) = niTacImp 0 (S.insert n $ ni 0 (ni 0 set ty) sc) p
2322− ni 0 set (PRewrite _ l r _) = ni 0 (ni 0 set l) r
2329+ ni 0 set (PRewrite _ _ l r _) = ni 0 (ni 0 set l) r
2323 ni 0 set (PTyped l r) = ni 0 (ni 0 set l) r
2330 ni 0 set (PTyped l r) = ni 0 (ni 0 set l) r
2324 ni 0 set (PPair _ _ _ l r) = ni 0 (ni 0 set l) r
2331 ni 0 set (PPair _ _ _ l r) = ni 0 (ni 0 set l) r
2325 ni 0 set (PDPair _ _ _ (PRef _ _ n) t r) = ni 0 (ni 0 set t) r
2332 ni 0 set (PDPair _ _ _ (PRef _ _ n) t r) = ni 0 (ni 0 set t) r
@@ -2395,7 +2402,7 @@ implicitNamesIn uvars ist tm
2395 ni 0 env (PIfThenElse _ c t f) = mapM_ (ni 0 env) [c, t, f]
2402 ni 0 env (PIfThenElse _ c t f) = mapM_ (ni 0 env) [c, t, f]
2396 ni 0 env (PLam fc n _ ty sc) = do ni 0 env ty; ni 0 (n:env) sc
2403 ni 0 env (PLam fc n _ ty sc) = do ni 0 env ty; ni 0 (n:env) sc
2397 ni 0 env (PPi p n _ ty sc) = do ni 0 env ty; ni 0 (n:env) sc
2404 ni 0 env (PPi p n _ ty sc) = do ni 0 env ty; ni 0 (n:env) sc
2398− ni 0 env (PRewrite _ l r _) = do ni 0 env l; ni 0 env r
2405+ ni 0 env (PRewrite _ _ l r _) = do ni 0 env l; ni 0 env r
2399 ni 0 env (PTyped l r) = do ni 0 env l; ni 0 env r
2406 ni 0 env (PTyped l r) = do ni 0 env l; ni 0 env r
2400 ni 0 env (PPair _ _ _ l r) = do ni 0 env l; ni 0 env r
2407 ni 0 env (PPair _ _ _ l r) = do ni 0 env l; ni 0 env r
2401 ni 0 env (PDPair _ _ _ (PRef _ _ n) t r) = do ni 0 env t; ni 0 (n:env) r
2408 ni 0 env (PDPair _ _ _ (PRef _ _ n) t r) = do ni 0 env t; ni 0 (n:env) r
@@ -2432,7 +2439,7 @@ namesIn uvars ist tm = nub $ ni 0 [] tm
2432 ni 0 env (PIfThenElse _ c t f) = concatMap (ni 0 env) [c, t, f]
2439 ni 0 env (PIfThenElse _ c t f) = concatMap (ni 0 env) [c, t, f]
2433 ni 0 env (PLam fc n nfc ty sc) = ni 0 env ty ++ ni 0 (n:env) sc
2440 ni 0 env (PLam fc n nfc ty sc) = ni 0 env ty ++ ni 0 (n:env) sc
2434 ni 0 env (PPi p n _ ty sc) = niTacImp 0 env p ++ ni 0 env ty ++ ni 0 (n:env) sc
2441 ni 0 env (PPi p n _ ty sc) = niTacImp 0 env p ++ ni 0 env ty ++ ni 0 (n:env) sc
2435− ni 0 env (PRewrite _ l r _) = ni 0 env l ++ ni 0 env r
2442+ ni 0 env (PRewrite _ _ l r _) = ni 0 env l ++ ni 0 env r
2436 ni 0 env (PTyped l r) = ni 0 env l ++ ni 0 env r
2443 ni 0 env (PTyped l r) = ni 0 env l ++ ni 0 env r
2437 ni 0 env (PPair _ _ _ l r) = ni 0 env l ++ ni 0 env r
2444 ni 0 env (PPair _ _ _ l r) = ni 0 env l ++ ni 0 env r
2438 ni 0 env (PDPair _ _ _ (PRef _ _ n) t r) = ni 0 env t ++ ni 0 (n:env) r
2445 ni 0 env (PDPair _ _ _ (PRef _ _ n) t r) = ni 0 env t ++ ni 0 (n:env) r
@@ -2467,7 +2474,7 @@ usedNamesIn vars ist tm = nub $ ni 0 [] tm
2467 ni 0 env (PIfThenElse _ c t f) = concatMap (ni 0 env) [c, t, f]
2474 ni 0 env (PIfThenElse _ c t f) = concatMap (ni 0 env) [c, t, f]
2468 ni 0 env (PLam fc n _ ty sc) = ni 0 env ty ++ ni 0 (n:env) sc
2475 ni 0 env (PLam fc n _ ty sc) = ni 0 env ty ++ ni 0 (n:env) sc
2469 ni 0 env (PPi p n _ ty sc) = niTacImp 0 env p ++ ni 0 env ty ++ ni 0 (n:env) sc
2476 ni 0 env (PPi p n _ ty sc) = niTacImp 0 env p ++ ni 0 env ty ++ ni 0 (n:env) sc
2470− ni 0 env (PRewrite _ l r _) = ni 0 env l ++ ni 0 env r
2477+ ni 0 env (PRewrite _ _ l r _) = ni 0 env l ++ ni 0 env r
2471 ni 0 env (PTyped l r) = ni 0 env l ++ ni 0 env r
2478 ni 0 env (PTyped l r) = ni 0 env l ++ ni 0 env r
2472 ni 0 env (PPair _ _ _ l r) = ni 0 env l ++ ni 0 env r
2479 ni 0 env (PPair _ _ _ l r) = ni 0 env l ++ ni 0 env r
2473 ni 0 env (PDPair _ _ _ (PRef _ _ n) t r) = ni 0 env t ++ ni 0 (n:env) r
2480 ni 0 env (PDPair _ _ _ (PRef _ _ n) t r) = ni 0 env t ++ ni 0 (n:env) r