@@ -599,28 +599,35 @@ expandParams dec ps ns tm = en tm
599 en (PApp fc f as) = PApp fc (en f) (map (fmap en) as)
599 en (PApp fc f as) = PApp fc (en f) (map (fmap en) as)
602+expandParamsD :: IState ->
602−expandParamsD :: (Name -> Name) -> [(Name, PTerm)] -> [Name] -> PDecl -> PDecl
603+ (Name -> Name) -> [(Name, PTerm)] -> [Name] -> PDecl -> PDecl
603−expandParamsD dec ps ns (PTy syn fc n ty)
604+expandParamsD ist dec ps ns (PTy syn fc n ty)
604 = if n `elem` ns
605 = if n `elem` ns
605 then PTy syn fc (dec n) (piBind ps (expandParams dec ps ns ty))
606 then PTy syn fc (dec n) (piBind ps (expandParams dec ps ns ty))
606 else PTy syn fc n (expandParams dec ps ns ty)
607 else PTy syn fc n (expandParams dec ps ns ty)
607−expandParamsD dec ps ns (PClauses fc n cs)
608+expandParamsD ist dec ps ns (PClauses fc n cs)
608 = let n' = if n `elem` ns then dec n else n in
609 = let n' = if n `elem` ns then dec n else n in
609 PClauses fc n' (map expandParamsC cs)
610 PClauses fc n' (map expandParamsC cs)
611 expandParamsC (PClause n lhs ws rhs ds)
612 expandParamsC (PClause n lhs ws rhs ds)
613+ = let ps' = updateps (namesIn ist rhs) (zip ps [0..])
612− = let n' = if n `elem` ns then dec n else n in
614+ n' = if n `elem` ns then dec n else n in
613− PClause n' (expandParams dec ps ns lhs)
615+ PClause n' (expandParams dec ps' ns lhs)
614− (map (expandParams dec ps ns) ws)
616+ (map (expandParams dec ps' ns) ws)
615− (expandParams dec ps ns rhs)
617+ (expandParams dec ps' ns rhs)
616− (map (expandParamsD dec ps ns) ds)
618+ (map (expandParamsD ist dec ps' ns) ds)
617 expandParamsC (PWith n lhs ws wval ds)
619 expandParamsC (PWith n lhs ws wval ds)
618 = let n' = if n `elem` ns then dec n else n in
620 = let n' = if n `elem` ns then dec n else n in
619 PWith n' (expandParams dec ps ns lhs)
621 PWith n' (expandParams dec ps ns lhs)
620 (map (expandParams dec ps ns) ws)
622 (map (expandParams dec ps ns) ws)
621 (expandParams dec ps ns wval)
623 (expandParams dec ps ns wval)
622− (map (expandParamsD dec ps ns) ds)
624+ (map (expandParamsD ist dec ps ns) ds)
626+ updateps nm (((a, t), i):as)
627+ | a `elem` nm = (a, t) : updateps nm as
628+ | otherwise = (MN i (show n ++ "_u"), t) : updateps nm as
623−expandParamsD dec ps ns d = d
630+expandParamsD ist dec ps ns d = d
625-- Calculate a priority for a type, for deciding elaboration order
632-- Calculate a priority for a type, for deciding elaboration order
626-- * if it's just a type variable or concrete type, do it early (0)
633-- * if it's just a type variable or concrete type, do it early (0)