@@ -998,14 +998,14 @@ expandParams dec ps ns infs tm = en tm
998 PLet fc n' nfc (en ty) (en v) (en (shadow n n' s))
998 PLet fc n' nfc (en ty) (en v) (en (shadow n n' s))
999 | otherwise = PLet fc n nfc (en ty) (en v) (en s)
999 | otherwise = PLet fc n nfc (en ty) (en v) (en s)
1000 -- FIXME: Should only do this in a type signature!
1000 -- FIXME: Should only do this in a type signature!
1001− en (PDPair f p (PRef f' fcs n) t r)
1001+ en (PDPair f hls p (PRef f' fcs n) t r)
1002 | n `elem` (map fst ps ++ ns) && t /= Placeholder
1002 | n `elem` (map fst ps ++ ns) && t /= Placeholder
1003 = let n' = mkShadow n in
1003 = let n' = mkShadow n in
1004− PDPair f p (PRef f' fcs n') (en t) (en (shadow n n' r))
1004+ PDPair f hls p (PRef f' fcs n') (en t) (en (shadow n n' r))
1005 en (PRewrite f l r g) = PRewrite f (en l) (en r) (fmap en g)
1005 en (PRewrite f l r g) = PRewrite f (en l) (en r) (fmap en g)
1006 en (PTyped l r) = PTyped (en l) (en r)
1006 en (PTyped l r) = PTyped (en l) (en r)
1007− en (PPair f p l r) = PPair f p (en l) (en r)
1007+ en (PPair f hls p l r) = PPair f hls p (en l) (en r)
1008− en (PDPair f p l t r) = PDPair f p (en l) (en t) (en r)
1008+ en (PDPair f hls p l t r) = PDPair f hls p (en l) (en t) (en r)
1009 en (PAlternative a as) = PAlternative a (map en as)
1009 en (PAlternative a as) = PAlternative a (map en as)
1010 en (PHidden t) = PHidden (en t)
1010 en (PHidden t) = PHidden (en t)
1011 en (PUnifyLog t) = PUnifyLog (en t)
1011 en (PUnifyLog t) = PUnifyLog (en t)
@@ -1105,8 +1105,8 @@ expandParamsD rhsonly ist dec ps ns (PClauses fc opts n cs)
1106 bnames (PRef _ _ n) = [n]
1106 bnames (PRef _ _ n) = [n]
1107 bnames (PApp _ _ args) = concatMap bnames (map getTm args)
1107 bnames (PApp _ _ args) = concatMap bnames (map getTm args)
1108− bnames (PPair _ _ l r) = bnames l ++ bnames r
1108+ bnames (PPair _ _ _ l r) = bnames l ++ bnames r
1109− bnames (PDPair _ _ l Placeholder r) = bnames l ++ bnames r
1109+ bnames (PDPair _ _ _ l Placeholder r) = bnames l ++ bnames r
1110 bnames _ = []
1110 bnames _ = []
1112-- | Expands parameters defined in parameter and where blocks inside of declarations
1112-- | Expands parameters defined in parameter and where blocks inside of declarations
@@ -1175,8 +1175,8 @@ getPriority i tm = 1 -- pri tm
1175 pri (PAppBind _ f as) = max 1 (max (pri f) (foldr max 0 (map (pri.getTm) as)))
1175 pri (PAppBind _ f as) = max 1 (max (pri f) (foldr max 0 (map (pri.getTm) as)))
1176 pri (PCase _ f as) = max 1 (max (pri f) (foldr max 0 (map (pri.snd) as)))
1176 pri (PCase _ f as) = max 1 (max (pri f) (foldr max 0 (map (pri.snd) as)))
1177 pri (PTyped l r) = pri l
1177 pri (PTyped l r) = pri l
1178− pri (PPair _ _ l r) = max 1 (max (pri l) (pri r))
1178+ pri (PPair _ _ _ l r) = max 1 (max (pri l) (pri r))
1179− pri (PDPair _ _ l t r) = max 1 (max (pri l) (max (pri t) (pri r)))
1179+ pri (PDPair _ _ _ l t r) = max 1 (max (pri l) (max (pri t) (pri r)))
1180 pri (PAlternative a as) = maximum (map pri as)
1180 pri (PAlternative a as) = maximum (map pri as)
1181 pri (PConstant _ _) = 0
1181 pri (PConstant _ _) = 0
1182 pri Placeholder = 1
1182 pri Placeholder = 1
@@ -1486,15 +1486,15 @@ implicitise syn ignore ist tm = -- trace ("INCOMING " ++ showImp True tm) $
1486 put (decls, nub (ns ++ (isn `dropAll` (env ++ map fst (getImps decls)))))
1486 put (decls, nub (ns ++ (isn `dropAll` (env ++ map fst (getImps decls)))))
1487 imps top env (PTyped l r)
1487 imps top env (PTyped l r)
1488 = imps top env l
1488 = imps top env l
1489− imps top env (PPair _ _ l r)
1489+ imps top env (PPair _ _ _ l r)
1490 = do (decls, ns) <- get
1490 = do (decls, ns) <- get
1491 let isn = namesIn uvars ist l ++ namesIn uvars ist r
1491 let isn = namesIn uvars ist l ++ namesIn uvars ist r
1492 put (decls, nub (ns ++ (isn `dropAll` (env ++ map fst (getImps decls)))))
1492 put (decls, nub (ns ++ (isn `dropAll` (env ++ map fst (getImps decls)))))
1493− imps top env (PDPair _ _ (PRef _ _ n) t r)
1493+ imps top env (PDPair _ _ _ (PRef _ _ n) t r)
1494 = do (decls, ns) <- get
1494 = do (decls, ns) <- get
1495 let isn = nub (namesIn uvars ist t ++ namesIn uvars ist r) \\ [n]
1495 let isn = nub (namesIn uvars ist t ++ namesIn uvars ist r) \\ [n]
1496 put (decls, nub (ns ++ (isn \\ (env ++ map fst (getImps decls)))))
1496 put (decls, nub (ns ++ (isn \\ (env ++ map fst (getImps decls)))))
1497− imps top env (PDPair _ _ l t r)
1497+ imps top env (PDPair _ _ _ l t r)
1498 = do (decls, ns) <- get
1498 = do (decls, ns) <- get
1499 let isn = namesIn uvars ist l ++ namesIn uvars ist t ++
1499 let isn = namesIn uvars ist l ++ namesIn uvars ist t ++
1500 namesIn uvars ist r
1500 namesIn uvars ist r
@@ -1559,15 +1559,15 @@ addImpl' inpat env infns imp_meths ist ptm
1559 = let l' = ai qq env ds l
1559 = let l' = ai qq env ds l
1560 r' = ai qq env ds r in
1560 r' = ai qq env ds r in
1561 PTyped l' r'
1561 PTyped l' r'
1562− ai qq env ds (PPair fc p l r)
1562+ ai qq env ds (PPair fc hls p l r)
1563 = let l' = ai qq env ds l
1563 = let l' = ai qq env ds l
1564 r' = ai qq env ds r in
1564 r' = ai qq env ds r in
1565− PPair fc p l' r'
1565+ PPair fc hls p l' r'
1566− ai qq env ds (PDPair fc p l t r)
1566+ ai qq env ds (PDPair fc hls p l t r)
1567 = let l' = ai qq env ds l
1567 = let l' = ai qq env ds l
1568 t' = ai qq env ds t
1568 t' = ai qq env ds t
1569 r' = ai qq env ds r in
1569 r' = ai qq env ds r in
1570− PDPair fc p l' t' r'
1570+ PDPair fc hls p l' t' r'
1571 ai qq env ds (PAlternative a as)
1571 ai qq env ds (PAlternative a as)
1572 = let as' = map (ai qq env ds) as in
1572 = let as' = map (ai qq env ds) as in
1573 PAlternative a as'
1573 PAlternative a as'
@@ -1616,7 +1616,8 @@ addImpl' inpat env infns imp_meths ist ptm
1616 val' = ai qq env ds val
1616 val' = ai qq env ds val
1617 sc' = ai qq ((n, Just ty):env) ds sc in
1617 sc' = ai qq ((n, Just ty):env) ds sc in
1618 PLet fc n nfc ty' val' sc'
1618 PLet fc n nfc ty' val' sc'
1619− _ -> ai qq env ds (PCase fc val [(PRef fc [] n, sc)])
1620+ ai qq env ds (PCase fc val [(PRef fc [] n, sc)])
1620 ai qq env ds (PPi p n nfc ty sc)
1621 ai qq env ds (PPi p n nfc ty sc)
1621 = let ty' = ai qq env ds ty
1622 = let ty' = ai qq env ds ty
1622 env' = if n `elem` imp_meths then env
1623 env' = if n `elem` imp_meths then env
@@ -1803,11 +1804,11 @@ stripLinear i tm = evalState (sl tm) [] where
1803 as' <- slAlts ns as
1804 as' <- slAlts ns as
1804 return (a' : as')
1805 return (a' : as')
1805 slAlts ns [] = return []
1806 slAlts ns [] = return []
1806− sl (PPair fc p l r) = do l' <- sl l; r' <- sl r; return (PPair fc p l' r')
1807+ sl (PPair fc hls p l r) = do l' <- sl l; r' <- sl r; return (PPair fc hls p l' r')
1807− sl (PDPair fc p l t r) = do l' <- sl l
1808+ sl (PDPair fc hls p l t r) = do l' <- sl l
1808− t' <- sl t
1809+ t' <- sl t
1809− r' <- sl r
1810+ r' <- sl r
1810− return (PDPair fc p l' t' r')
1811+ return (PDPair fc hls p l' t' r')
1811 sl (PApp fc fn args) = do fn' <- case fn of
1812 sl (PApp fc fn args) = do fn' <- case fn of
1812 -- Just the args, fn isn't matchable as a var
1813 -- Just the args, fn isn't matchable as a var
1813 PRef _ _ _ -> return fn
1814 PRef _ _ _ -> return fn
@@ -1852,8 +1853,8 @@ stripUnmatchable i (PApp fc fn args) = PApp fc fn (fmap (fmap su) args) where
1852 = let alts' = filter (/= Placeholder) (map su alts) in
1853 = let alts' = filter (/= Placeholder) (map su alts) in
1853 if null alts' then Placeholder
1854 if null alts' then Placeholder
1854 else PAlternative b alts'
1855 else PAlternative b alts'
1855− su (PPair fc p l r) = PPair fc p (su l) (su r)
1856+ su (PPair fc hls p l r) = PPair fc hls p (su l) (su r)
1856− su (PDPair fc p l t r) = PDPair fc p (su l) (su t) (su r)
1857+ su (PDPair fc hls p l t r) = PDPair fc hls p (su l) (su t) (su r)
1857 su t@(PLam fc _ _ _ _) = PHidden t
1858 su t@(PLam fc _ _ _ _) = PHidden t
1858 su t@(PPi _ _ _ _ _) = PHidden t
1859 su t@(PPi _ _ _ _ _) = PHidden t
1859 su t@(PConstant _ c) | isTypeConst c = PHidden t
1860 su t@(PConstant _ c) | isTypeConst c = PHidden t
@@ -1877,9 +1878,8 @@ mkPApp fc a f as = let rest = drop a as in
1877-- FIXME: It's possible that this really has to happen after elaboration
1878-- FIXME: It's possible that this really has to happen after elaboration
1879findStatics :: IState -> PTerm -> (PTerm, [Bool])
1880findStatics :: IState -> PTerm -> (PTerm, [Bool])
1880−findStatics ist tm = trace (show tm) $
1881+findStatics ist tm = let (ns, ss) = fs tm
1881− let (ns, ss) = fs tm in
1882− runState (pos ns ss tm) []
1882+ in runState (pos ns ss tm) []
1883 where fs (PPi p n fc t sc)
1883 where fs (PPi p n fc t sc)
1884 | Static <- pstatic p
1884 | Static <- pstatic p
1885 = let (ns, ss) = fs sc in
1885 = let (ns, ss) = fs sc in
@@ -1969,13 +1969,13 @@ matchClause' names i x y = checkRpts $ match (fullApp x) (fullApp y) where
1969 return (ml ++ mr)
1969 return (ml ++ mr)
1970 match (PTyped l r) x = match l x
1970 match (PTyped l r) x = match l x
1971 match x (PTyped l r) = match x l
1971 match x (PTyped l r) = match x l
1972− match (PPair _ _ l r) (PPair _ _ l' r') = do ml <- match' l l'
1972+ match (PPair _ _ _ l r) (PPair _ _ _ l' r') = do ml <- match' l l'
1973− mr <- match' r r'
1973+ mr <- match' r r'
1974− return (ml ++ mr)
1974+ return (ml ++ mr)
1975− match (PDPair _ _ l t r) (PDPair _ _ l' t' r') = do ml <- match' l l'
1975+ match (PDPair _ _ _ l t r) (PDPair _ _ _ l' t' r') = do ml <- match' l l'
1976− mt <- match' t t'
1976+ mt <- match' t t'
1977− mr <- match' r r'
1977+ mr <- match' r r'
1978− return (ml ++ mt ++ mr)
1978+ return (ml ++ mt ++ mr)
1979 match (PAlternative a as) (PAlternative a' as')
1979 match (PAlternative a as) (PAlternative a' as')
1980 = do ms <- zipWithM match' as as'
1980 = do ms <- zipWithM match' as as'
1981 return (concat ms)
1981 return (concat ms)
@@ -2058,8 +2058,8 @@ substMatchShadow n shs tm t = sm shs t where
2058 sm xs (PRewrite f x y tm) = PRewrite f (sm xs x) (sm xs y)
2058 sm xs (PRewrite f x y tm) = PRewrite f (sm xs x) (sm xs y)
2059 (fmap (sm xs) tm)
2059 (fmap (sm xs) tm)
2060 sm xs (PTyped x y) = PTyped (sm xs x) (sm xs y)
2060 sm xs (PTyped x y) = PTyped (sm xs x) (sm xs y)
2061− sm xs (PPair f p x y) = PPair f p (sm xs x) (sm xs y)
2061+ sm xs (PPair f hls p x y) = PPair f hls p (sm xs x) (sm xs y)
2062− sm xs (PDPair f p x t y) = PDPair f p (sm xs x) (sm xs t) (sm xs y)
2062+ sm xs (PDPair f hls p x t y) = PDPair f hls p (sm xs x) (sm xs t) (sm xs y)
2063 sm xs (PAlternative a as) = PAlternative a (map (sm xs) as)
2063 sm xs (PAlternative a as) = PAlternative a (map (sm xs) as)
2064 sm xs (PHidden x) = PHidden (sm xs x)
2064 sm xs (PHidden x) = PHidden (sm xs x)
2065 sm xs (PUnifyLog x) = PUnifyLog (sm xs x)
2065 sm xs (PUnifyLog x) = PUnifyLog (sm xs x)
@@ -2085,8 +2085,8 @@ shadow n n' t = sm t where
2085 sm (PIfThenElse fc c t f) = PIfThenElse fc (sm c) (sm t) (sm f)
2085 sm (PIfThenElse fc c t f) = PIfThenElse fc (sm c) (sm t) (sm f)
2086 sm (PRewrite f x y tm) = PRewrite f (sm x) (sm y) (fmap sm tm)
2086 sm (PRewrite f x y tm) = PRewrite f (sm x) (sm y) (fmap sm tm)
2087 sm (PTyped x y) = PTyped (sm x) (sm y)
2087 sm (PTyped x y) = PTyped (sm x) (sm y)
2088− sm (PPair f p x y) = PPair f p (sm x) (sm y)
2088+ sm (PPair f hls p x y) = PPair f hls p (sm x) (sm y)
2089− sm (PDPair f p x t y) = PDPair f p (sm x) (sm t) (sm y)
2089+ sm (PDPair f hls p x t y) = PDPair f hls p (sm x) (sm t) (sm y)
2090 sm (PAlternative a as) = PAlternative a (map sm as)
2090 sm (PAlternative a as) = PAlternative a (map sm as)
2091 sm (PTactics ts) = PTactics (map (fmap sm) ts)
2091 sm (PTactics ts) = PTactics (map (fmap sm) ts)
2092 sm (PProof ts) = PProof (map (fmap sm) ts)
2092 sm (PProof ts) = PProof (map (fmap sm) ts)
@@ -2167,10 +2167,10 @@ mkUniqueNames env tm = evalState (mkUniq tm) (S.fromList env) where
2167 return $! PCase fc t' alts'
2167 return $! PCase fc t' alts'
2168 mkUniq (PIfThenElse fc c t f)
2168 mkUniq (PIfThenElse fc c t f)
2169 = liftM3 (PIfThenElse fc) (mkUniq c) (mkUniq t) (mkUniq f)
2169 = liftM3 (PIfThenElse fc) (mkUniq c) (mkUniq t) (mkUniq f)
2170− mkUniq (PPair fc p l r)
2170+ mkUniq (PPair fc hls p l r)
2171 = do l' <- mkUniq l; r' <- mkUniq r
2171 = do l' <- mkUniq l; r' <- mkUniq r
2172− return $! PPair fc p l' r'
2172+ return $! PPair fc hls p l' r'
2173− mkUniq (PDPair fc p (PRef fc' hl n) t sc)
2173+ mkUniq (PDPair fc hls p (PRef fc' hls' n) t sc)
2174 | t /= Placeholder
2174 | t /= Placeholder
2175 = do env <- get
2175 = do env <- get
2176 (n', sc') <- if n `S.member` env
2176 (n', sc') <- if n `S.member` env
@@ -2180,10 +2180,10 @@ mkUniqueNames env tm = evalState (mkUniq tm) (S.fromList env) where
2180 put (S.insert n' env)
2180 put (S.insert n' env)
2181 t' <- mkUniq t
2181 t' <- mkUniq t
2182 sc'' <- mkUniq sc'
2182 sc'' <- mkUniq sc'
2183− return $! PDPair fc p (PRef fc' hl n') t' sc''
2183+ return $! PDPair fc hls p (PRef fc' hls' n') t' sc''
2184− mkUniq (PDPair fc p l t r)
2184+ mkUniq (PDPair fc hls p l t r)
2185 = do l' <- mkUniq l; t' <- mkUniq t; r' <- mkUniq r
2185 = do l' <- mkUniq l; t' <- mkUniq t; r' <- mkUniq r
2186− return $! PDPair fc p l' t' r'
2186+ return $! PDPair fc hls p l' t' r'
2187 mkUniq (PAlternative b as)
2187 mkUniq (PAlternative b as)
2188 = liftM (PAlternative b) (mapM mkUniq as)
2188 = liftM (PAlternative b) (mapM mkUniq as)
2189 mkUniq (PHidden t) = liftM PHidden (mkUniq t)
2189 mkUniq (PHidden t) = liftM PHidden (mkUniq t)