@@ -434,6 +434,7 @@ data PTerm = PQuote Raw
434434 | PLam Name PTerm PTerm
435435 | PPi Plicity Name PTerm PTerm
436436 | PLet Name PTerm PTerm PTerm
437+ | PTyped PTerm PTerm -- term with explicit type
437438 | PApp FC PTerm [PArg]
438439 | PCase FC PTerm [(PTerm, PTerm)]
439440 | PTrue FC
@@ -469,6 +470,7 @@ mapPT f t = f (mpt t) where
469470 mpt (PApp fc t as) = PApp fc (mapPT f t) (map (fmap (mapPT f)) as)
470471 mpt (PCase fc c os) = PCase fc (mapPT f c) (map (pmap (mapPT f)) os)
471472 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)
472474 mpt (PPair fc l r) = PPair fc (mapPT f l) (mapPT f r)
473475 mpt (PDPair fc l t r) = PDPair fc (mapPT f l) (mapPT f t) (mapPT f r)
474476 mpt (PAlternative as) = PAlternative (map (mapPT f) as)
@@ -714,6 +716,7 @@ showImp impl tm = se 10 tm where
714716 se p (PTrue _) = "()"
715717 se p (PFalse _) = "_|_"
716718 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 ++ ")"
717720 se p (PPair _ l r) = "(" ++ se 10 l ++ ", " ++ se 10 r ++ ")"
718721 se p (PDPair _ l t r) = "(" ++ se 10 l ++ " ** " ++ se 10 r ++ ")"
719722 se p (PAlternative as) = "(|" ++ showSep " , " (map (se 10) as) ++ "|)"
@@ -751,6 +754,7 @@ allNamesIn tm = nub $ ni [] tm
751754 ni env (PPi _ n ty sc) = ni env ty ++ ni (n:env) sc
752755 ni env (PHidden tm) = ni env tm
753756 ni env (PEq _ l r) = ni env l ++ ni env r
757+ ni env (PTyped l r) = ni env l ++ ni env r
754758 ni env (PPair _ l r) = ni env l ++ ni env r
755759 ni env (PDPair _ (PRef _ n) t r) = ni env t ++ ni (n:env) r
756760 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
770774 ni env (PLam n ty sc) = ni env ty ++ ni (n:env) sc
771775 ni env (PPi _ n ty sc) = ni env ty ++ ni (n:env) sc
772776 ni env (PEq _ l r) = ni env l ++ ni env r
777+ ni env (PTyped l r) = ni env l ++ ni env r
773778 ni env (PPair _ l r) = ni env l ++ ni env r
774779 ni env (PDPair _ (PRef _ n) t r) = ni env t ++ ni (n:env) r
775780 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
881886 PLet n' (en ty) (en v) (en (shadow n n' s))
882887 | otherwise = PLet n (en ty) (en v) (en s)
883888 en (PEq f l r) = PEq f (en l) (en r)
889+ en (PTyped l r) = PTyped (en l) (en r)
884890 en (PPair f l r) = PPair f (en l) (en r)
885891 en (PDPair f l t r) = PDPair f (en l) (en t) (en r)
886892 en (PAlternative as) = PAlternative (map en as)
@@ -956,6 +962,7 @@ getPriority i tm = pri tm
956962 pri (PEq _ l r) = max 1 (max (pri l) (pri r))
957963 pri (PApp _ f as) = max 1 (max (pri f) (foldr max 0 (map (pri.getTm) as)))
958964 pri (PCase _ f as) = max 1 (max (pri f) (foldr max 0 (map (pri.snd) as)))
965+ pri (PTyped l r) = pri l
959966 pri (PPair _ l r) = max 1 (max (pri l) (pri r))
960967 pri (PDPair _ l t r) = max 1 (max (pri l) (max (pri t) (pri r)))
961968 pri (PAlternative as) = maximum (map pri as)
@@ -1028,6 +1035,8 @@ implicitise syn ist tm
10281035 = do (decls, ns) <- get
10291036 let isn = namesIn uvars ist l ++ namesIn uvars ist r
10301037 put (decls, nub (ns ++ (isn `dropAll` (env ++ map fst (getImps decls)))))
1038+ imps top env (PTyped l r)
1039+ = imps top env l
10311040 imps top env (PPair _ l r)
10321041 = do (decls, ns) <- get
10331042 let isn = namesIn uvars ist l ++ namesIn uvars ist r
@@ -1067,6 +1076,9 @@ addImpl ist ptm = ai [] ptm
10671076 ai env (PEq fc l r) = let l' = ai env l
10681077 r' = ai env r in
10691078 PEq fc l' r'
1079+ ai env (PTyped l r) = let l' = ai env l
1080+ r' = ai env r in
1081+ PTyped l' r'
10701082 ai env (PPair fc l r) = let l' = ai env l
10711083 r' = ai env r in
10721084 PPair fc l' r'
@@ -1236,6 +1248,11 @@ matchClause' names x y = checkRpts $ match (fullApp x) (fullApp y) where
12361248 match (PEq _ l r) (PEq _ l' r') = do ml <- match' l l'
12371249 mr <- match' r r'
12381250 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'
1254+ mr <- match r r'
1255+ return (ml ++ mr)
12391256 match (PPair _ l r) (PPair _ l' r') = do ml <- match' l l'
12401257 mr <- match' r r'
12411258 return (ml ++ mr)
@@ -1299,6 +1316,7 @@ substMatch n tm t = sm t where
12991316 sm (PApp f x as) = PApp f (sm x) (map (fmap sm) as)
13001317 sm (PCase f x as) = PCase f (sm x) (map (pmap sm) as)
13011318 sm (PEq f x y) = PEq f (sm x) (sm y)
1319+ sm (PTyped x y) = PTyped (sm x) (sm y)
13021320 sm (PPair f x y) = PPair f (sm x) (sm y)
13031321 sm (PDPair f x t y) = PDPair f (sm x) (sm t) (sm y)
13041322 sm (PAlternative as) = PAlternative (map sm as)
@@ -1313,6 +1331,7 @@ shadow n n' t = sm t where
13131331 sm (PApp f x as) = PApp f (sm x) (map (fmap sm) as)
13141332 sm (PCase f x as) = PCase f (sm x) (map (pmap sm) as)
13151333 sm (PEq f x y) = PEq f (sm x) (sm y)
1334+ sm (PTyped x y) = PTyped (sm x) (sm y)
13161335 sm (PPair f x y) = PPair f (sm x) (sm y)
13171336 sm (PDPair f x t y) = PDPair f (sm x) (sm t) (sm y)
13181337 sm (PAlternative as) = PAlternative (map sm as)