@@ -599,28 +599,35 @@ expandParams dec ps ns tm = en tm
599599 en (PApp fc f as) = PApp fc (en f) (map (fmap en) as)
600600 en t = t
601601
602−expandParamsD :: (Name -> Name) -> [(Name, PTerm)] -> [Name] -> PDecl -> PDecl
603−expandParamsD dec ps ns (PTy syn fc n ty)
602+expandParamsD :: IState ->
603+ (Name -> Name) -> [(Name, PTerm)] -> [Name] -> PDecl -> PDecl
604+expandParamsD ist dec ps ns (PTy syn fc n ty)
604605 = if n `elem` ns
605606 then PTy syn fc (dec n) (piBind ps (expandParams dec ps ns ty))
606607 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)
608609 = let n' = if n `elem` ns then dec n else n in
609610 PClauses fc n' (map expandParamsC cs)
610611 where
611612 expandParamsC (PClause n lhs ws rhs ds)
612− = let n' = if n `elem` ns then dec n else n in
613− PClause n' (expandParams dec ps ns lhs)
614− (map (expandParams dec ps ns) ws)
615− (expandParams dec ps ns rhs)
616− (map (expandParamsD dec ps ns) ds)
613+ = let ps' = updateps (namesIn ist rhs) (zip ps [0..])
614+ n' = if n `elem` ns then dec n else n in
615+ PClause n' (expandParams dec ps' ns lhs)
616+ (map (expandParams dec ps' ns) ws)
617+ (expandParams dec ps' ns rhs)
618+ (map (expandParamsD ist dec ps' ns) ds)
617619 expandParamsC (PWith n lhs ws wval ds)
618620 = let n' = if n `elem` ns then dec n else n in
619621 PWith n' (expandParams dec ps ns lhs)
620622 (map (expandParams dec ps ns) ws)
621623 (expandParams dec ps ns wval)
622− (map (expandParamsD dec ps ns) ds)
623−expandParamsD dec ps ns d = d
624+ (map (expandParamsD ist dec ps ns) ds)
625+ updateps nm [] = []
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
629+
630+expandParamsD ist dec ps ns d = d
624631
625632-- Calculate a priority for a type, for deciding elaboration order
626633-- * if it's just a type variable or concrete type, do it early (0)