@@ -434,6 +434,7 @@ data PTerm = PQuote Raw
434 | PLam Name PTerm PTerm
434 | PLam Name PTerm PTerm
435 | PPi Plicity Name PTerm PTerm
435 | PPi Plicity Name PTerm PTerm
436 | PLet Name PTerm PTerm PTerm
436 | PLet Name PTerm PTerm PTerm
437+ | PTyped PTerm PTerm -- term with explicit type
437 | PApp FC PTerm [PArg]
438 | PApp FC PTerm [PArg]
438 | PCase FC PTerm [(PTerm, PTerm)]
439 | PCase FC PTerm [(PTerm, PTerm)]
439 | PTrue FC
440 | PTrue FC
@@ -469,6 +470,7 @@ mapPT f t = f (mpt t) where
469 mpt (PApp fc t as) = PApp fc (mapPT f t) (map (fmap (mapPT f)) as)
470 mpt (PApp fc t as) = PApp fc (mapPT f t) (map (fmap (mapPT f)) as)
470 mpt (PCase fc c os) = PCase fc (mapPT f c) (map (pmap (mapPT f)) os)
471 mpt (PCase fc c os) = PCase fc (mapPT f c) (map (pmap (mapPT f)) os)
471 mpt (PEq fc l r) = PEq fc (mapPT f l) (mapPT f r)
472 mpt (PEq fc l r) = PEq fc (mapPT f l) (mapPT f r)
473+ mpt (PTyped l r) = PTyped (mapPT f l) (mapPT f r)
472 mpt (PPair fc l r) = PPair fc (mapPT f l) (mapPT f r)
474 mpt (PPair fc l r) = PPair fc (mapPT f l) (mapPT f r)
473 mpt (PDPair fc l t r) = PDPair fc (mapPT f l) (mapPT f t) (mapPT f r)
475 mpt (PDPair fc l t r) = PDPair fc (mapPT f l) (mapPT f t) (mapPT f r)
474 mpt (PAlternative as) = PAlternative (map (mapPT f) as)
476 mpt (PAlternative as) = PAlternative (map (mapPT f) as)
@@ -714,6 +716,7 @@ showImp impl tm = se 10 tm where
714 se p (PTrue _) = "()"
716 se p (PTrue _) = "()"
715 se p (PFalse _) = "_|_"
717 se p (PFalse _) = "_|_"
716 se p (PEq _ l r) = bracket p 2 $ se 10 l ++ " = " ++ se 10 r
718 se p (PEq _ l r) = bracket p 2 $ se 10 l ++ " = " ++ se 10 r
719+ se p (PTyped l r) = "(" ++ se 10 l ++ " : " ++ se 10 r ++ ")"
717 se p (PPair _ l r) = "(" ++ se 10 l ++ ", " ++ se 10 r ++ ")"
720 se p (PPair _ l r) = "(" ++ se 10 l ++ ", " ++ se 10 r ++ ")"
718 se p (PDPair _ l t r) = "(" ++ se 10 l ++ " ** " ++ se 10 r ++ ")"
721 se p (PDPair _ l t r) = "(" ++ se 10 l ++ " ** " ++ se 10 r ++ ")"
719 se p (PAlternative as) = "(|" ++ showSep " , " (map (se 10) as) ++ "|)"
722 se p (PAlternative as) = "(|" ++ showSep " , " (map (se 10) as) ++ "|)"
@@ -751,6 +754,7 @@ allNamesIn tm = nub $ ni [] tm
751 ni env (PPi _ n ty sc) = ni env ty ++ ni (n:env) sc
754 ni env (PPi _ n ty sc) = ni env ty ++ ni (n:env) sc
752 ni env (PHidden tm) = ni env tm
755 ni env (PHidden tm) = ni env tm
753 ni env (PEq _ l r) = ni env l ++ ni env r
756 ni env (PEq _ l r) = ni env l ++ ni env r
757+ ni env (PTyped l r) = ni env l ++ ni env r
754 ni env (PPair _ l r) = ni env l ++ ni env r
758 ni env (PPair _ l r) = ni env l ++ ni env r
755 ni env (PDPair _ (PRef _ n) t r) = ni env t ++ ni (n:env) r
759 ni env (PDPair _ (PRef _ n) t r) = ni env t ++ ni (n:env) r
756 ni env (PDPair _ l t r) = ni env l ++ ni env t ++ ni env r
760 ni env (PDPair _ l t r) = ni env l ++ ni env t ++ ni env r
@@ -770,6 +774,7 @@ namesIn uvars ist tm = nub $ ni [] tm
770 ni env (PLam n ty sc) = ni env ty ++ ni (n:env) sc
774 ni env (PLam n ty sc) = ni env ty ++ ni (n:env) sc
771 ni env (PPi _ n ty sc) = ni env ty ++ ni (n:env) sc
775 ni env (PPi _ n ty sc) = ni env ty ++ ni (n:env) sc
772 ni env (PEq _ l r) = ni env l ++ ni env r
776 ni env (PEq _ l r) = ni env l ++ ni env r
777+ ni env (PTyped l r) = ni env l ++ ni env r
773 ni env (PPair _ l r) = ni env l ++ ni env r
778 ni env (PPair _ l r) = ni env l ++ ni env r
774 ni env (PDPair _ (PRef _ n) t r) = ni env t ++ ni (n:env) r
779 ni env (PDPair _ (PRef _ n) t r) = ni env t ++ ni (n:env) r
775 ni env (PDPair _ l t r) = ni env l ++ ni env t ++ ni env r
780 ni env (PDPair _ l t r) = ni env l ++ ni env t ++ ni env r
@@ -881,6 +886,7 @@ expandParams dec ps ns tm = en tm
881 PLet n' (en ty) (en v) (en (shadow n n' s))
886 PLet n' (en ty) (en v) (en (shadow n n' s))
882 | otherwise = PLet n (en ty) (en v) (en s)
887 | otherwise = PLet n (en ty) (en v) (en s)
883 en (PEq f l r) = PEq f (en l) (en r)
888 en (PEq f l r) = PEq f (en l) (en r)
889+ en (PTyped l r) = PTyped (en l) (en r)
884 en (PPair f l r) = PPair f (en l) (en r)
890 en (PPair f l r) = PPair f (en l) (en r)
885 en (PDPair f l t r) = PDPair f (en l) (en t) (en r)
891 en (PDPair f l t r) = PDPair f (en l) (en t) (en r)
886 en (PAlternative as) = PAlternative (map en as)
892 en (PAlternative as) = PAlternative (map en as)
@@ -956,6 +962,7 @@ getPriority i tm = pri tm
956 pri (PEq _ l r) = max 1 (max (pri l) (pri r))
962 pri (PEq _ l r) = max 1 (max (pri l) (pri r))
957 pri (PApp _ f as) = max 1 (max (pri f) (foldr max 0 (map (pri.getTm) as)))
963 pri (PApp _ f as) = max 1 (max (pri f) (foldr max 0 (map (pri.getTm) as)))
958 pri (PCase _ f as) = max 1 (max (pri f) (foldr max 0 (map (pri.snd) as)))
964 pri (PCase _ f as) = max 1 (max (pri f) (foldr max 0 (map (pri.snd) as)))
965+ pri (PTyped l r) = pri l
959 pri (PPair _ l r) = max 1 (max (pri l) (pri r))
966 pri (PPair _ l r) = max 1 (max (pri l) (pri r))
960 pri (PDPair _ l t r) = max 1 (max (pri l) (max (pri t) (pri r)))
967 pri (PDPair _ l t r) = max 1 (max (pri l) (max (pri t) (pri r)))
961 pri (PAlternative as) = maximum (map pri as)
968 pri (PAlternative as) = maximum (map pri as)
@@ -1028,6 +1035,8 @@ implicitise syn ist tm
1028 = do (decls, ns) <- get
1035 = do (decls, ns) <- get
1029 let isn = namesIn uvars ist l ++ namesIn uvars ist r
1036 let isn = namesIn uvars ist l ++ namesIn uvars ist r
1030 put (decls, nub (ns ++ (isn `dropAll` (env ++ map fst (getImps decls)))))
1037 put (decls, nub (ns ++ (isn `dropAll` (env ++ map fst (getImps decls)))))
1038+ imps top env (PTyped l r)
1031 imps top env (PPair _ l r)
1040 imps top env (PPair _ l r)
1032 = do (decls, ns) <- get
1041 = do (decls, ns) <- get
1033 let isn = namesIn uvars ist l ++ namesIn uvars ist r
1042 let isn = namesIn uvars ist l ++ namesIn uvars ist r
@@ -1067,6 +1076,9 @@ addImpl ist ptm = ai [] ptm
1067 ai env (PEq fc l r) = let l' = ai env l
1076 ai env (PEq fc l r) = let l' = ai env l
1068 r' = ai env r in
1077 r' = ai env r in
1069 PEq fc l' r'
1078 PEq fc l' r'
1079+ ai env (PTyped l r) = let l' = ai env l
1070 ai env (PPair fc l r) = let l' = ai env l
1082 ai env (PPair fc l r) = let l' = ai env l
1071 r' = ai env r in
1083 r' = ai env r in
1072 PPair fc l' r'
1084 PPair fc l' r'
@@ -1236,6 +1248,11 @@ matchClause' names x y = checkRpts $ match (fullApp x) (fullApp y) where
1236 match (PEq _ l r) (PEq _ l' r') = do ml <- match' l l'
1248 match (PEq _ l r) (PEq _ l' r') = do ml <- match' l l'
1237 mr <- match' r r'
1249 mr <- match' r r'
1238 return (ml ++ mr)
1250 return (ml ++ mr)
1251+ match (PTyped l r) x = match l x
1252+ match x (PTyped l r) = match x l
1253+ match (PTyped l r) (PTyped l' r') = do ml <- match l l'
1239 match (PPair _ l r) (PPair _ l' r') = do ml <- match' l l'
1256 match (PPair _ l r) (PPair _ l' r') = do ml <- match' l l'
1240 mr <- match' r r'
1257 mr <- match' r r'
1241 return (ml ++ mr)
1258 return (ml ++ mr)
@@ -1299,6 +1316,7 @@ substMatch n tm t = sm t where
1299 sm (PApp f x as) = PApp f (sm x) (map (fmap sm) as)
1316 sm (PApp f x as) = PApp f (sm x) (map (fmap sm) as)
1300 sm (PCase f x as) = PCase f (sm x) (map (pmap sm) as)
1317 sm (PCase f x as) = PCase f (sm x) (map (pmap sm) as)
1301 sm (PEq f x y) = PEq f (sm x) (sm y)
1318 sm (PEq f x y) = PEq f (sm x) (sm y)
1319+ sm (PTyped x y) = PTyped (sm x) (sm y)
1302 sm (PPair f x y) = PPair f (sm x) (sm y)
1320 sm (PPair f x y) = PPair f (sm x) (sm y)
1303 sm (PDPair f x t y) = PDPair f (sm x) (sm t) (sm y)
1321 sm (PDPair f x t y) = PDPair f (sm x) (sm t) (sm y)
1304 sm (PAlternative as) = PAlternative (map sm as)
1322 sm (PAlternative as) = PAlternative (map sm as)
@@ -1313,6 +1331,7 @@ shadow n n' t = sm t where
1313 sm (PApp f x as) = PApp f (sm x) (map (fmap sm) as)
1331 sm (PApp f x as) = PApp f (sm x) (map (fmap sm) as)
1314 sm (PCase f x as) = PCase f (sm x) (map (pmap sm) as)
1332 sm (PCase f x as) = PCase f (sm x) (map (pmap sm) as)
1315 sm (PEq f x y) = PEq f (sm x) (sm y)
1333 sm (PEq f x y) = PEq f (sm x) (sm y)
1334+ sm (PTyped x y) = PTyped (sm x) (sm y)
1316 sm (PPair f x y) = PPair f (sm x) (sm y)
1335 sm (PPair f x y) = PPair f (sm x) (sm y)
1317 sm (PDPair f x t y) = PDPair f (sm x) (sm t) (sm y)
1336 sm (PDPair f x t y) = PDPair f (sm x) (sm t) (sm y)
1318 sm (PAlternative as) = PAlternative (map sm as)
1337 sm (PAlternative as) = PAlternative (map sm as)