@@ -502,37 +502,40 @@ expandParams dec ps ns tm = en tm
503 nseq x y = nsroot x == nsroot y
503 nseq x y = nsroot x == nsroot y
505−expandParamsD :: IState ->
505+expandParamsD :: Bool -> -- True = RHS only
506 (Name -> Name) -> [(Name, PTerm)] -> [Name] -> PDecl -> PDecl
507 (Name -> Name) -> [(Name, PTerm)] -> [Name] -> PDecl -> PDecl
507−expandParamsD ist dec ps ns (PTy doc syn fc o n ty)
508+expandParamsD False ist dec ps ns (PTy doc syn fc o n ty)
508 = if n `elem` ns
509 = if n `elem` ns
509 then PTy doc syn fc o (dec n) (piBind ps (expandParams dec ps ns ty))
510 then PTy doc syn fc o (dec n) (piBind ps (expandParams dec ps ns ty))
510 else PTy doc syn fc o n (expandParams dec ps ns ty)
511 else PTy doc syn fc o n (expandParams dec ps ns ty)
511−expandParamsD ist dec ps ns (PClauses fc opts n cs)
512+expandParamsD rhsonly ist dec ps ns (PClauses fc opts n cs)
512 = let n' = if n `elem` ns then dec n else n in
513 = let n' = if n `elem` ns then dec n else n in
513 PClauses fc opts n' (map expandParamsC cs)
514 PClauses fc opts n' (map expandParamsC cs)
515 expandParamsC (PClause fc n lhs ws rhs ds)
516 expandParamsC (PClause fc n lhs ws rhs ds)
516 = let -- ps' = updateps True (namesIn ist rhs) (zip ps [0..])
517 = let -- ps' = updateps True (namesIn ist rhs) (zip ps [0..])
517 ps'' = updateps False (namesIn [] ist lhs) (zip ps [0..])
518 ps'' = updateps False (namesIn [] ist lhs) (zip ps [0..])
519+ lhs' = if rhsonly then lhs else (expandParams dec ps'' ns lhs)
518 n' = if n `elem` ns then dec n else n in
520 n' = if n `elem` ns then dec n else n in
519− PClause fc n' (expandParams dec ps'' ns lhs)
521+ PClause fc n' lhs'
520 (map (expandParams dec ps'' ns) ws)
522 (map (expandParams dec ps'' ns) ws)
521 (expandParams dec ps'' ns rhs)
523 (expandParams dec ps'' ns rhs)
522− (map (expandParamsD ist dec ps'' ns) ds)
524+ (map (expandParamsD True ist dec ps'' ns) ds)
523 expandParamsC (PWith fc n lhs ws wval ds)
525 expandParamsC (PWith fc n lhs ws wval ds)
524 = let -- ps' = updateps True (namesIn ist wval) (zip ps [0..])
526 = let -- ps' = updateps True (namesIn ist wval) (zip ps [0..])
525 ps'' = updateps False (namesIn [] ist lhs) (zip ps [0..])
527 ps'' = updateps False (namesIn [] ist lhs) (zip ps [0..])
528+ lhs' = if rhsonly then lhs else (expandParams dec ps'' ns lhs)
526 n' = if n `elem` ns then dec n else n in
529 n' = if n `elem` ns then dec n else n in
527− PWith fc n' (expandParams dec ps'' ns lhs)
530+ PWith fc n' lhs'
528 (map (expandParams dec ps'' ns) ws)
531 (map (expandParams dec ps'' ns) ws)
529 (expandParams dec ps'' ns wval)
532 (expandParams dec ps'' ns wval)
530− (map (expandParamsD ist dec ps'' ns) ds)
533+ (map (expandParamsD rhsonly ist dec ps'' ns) ds)
531 updateps yn nm [] = []
534 updateps yn nm [] = []
532 updateps yn nm (((a, t), i):as)
535 updateps yn nm (((a, t), i):as)
533 | (a `elem` nm) == yn = (a, t) : updateps yn nm as
536 | (a `elem` nm) == yn = (a, t) : updateps yn nm as
534 | otherwise = (MN i (show n ++ "_u"), t) : updateps yn nm as
537 | otherwise = (MN i (show n ++ "_u"), t) : updateps yn nm as
535−expandParamsD ist dec ps ns (PData doc syn fc co pd)
538+expandParamsD rhs ist dec ps ns (PData doc syn fc co pd)
536 = PData doc syn fc co (expandPData pd)
539 = PData doc syn fc co (expandPData pd)
538 -- just do the type decl, leave constructors alone (parameters will be
541 -- just do the type decl, leave constructors alone (parameters will be
@@ -543,26 +546,27 @@ expandParamsD ist dec ps ns (PData doc syn fc co pd)
543 else PDatadecl n (expandParams dec ps ns ty) (map econ cons)
546 else PDatadecl n (expandParams dec ps ns ty) (map econ cons)
544 econ (doc, n, t, fc)
547 econ (doc, n, t, fc)
545 = (doc, dec n, piBindp expl ps (expandParams dec ps ns t), fc)
548 = (doc, dec n, piBindp expl ps (expandParams dec ps ns t), fc)
546−expandParamsD ist dec ps ns (PParams f params pds)
549+expandParamsD rhs ist dec ps ns (PParams f params pds)
547− = PParams f (ps ++ map (mapsnd (expandParams dec ps ns)) params) pds
550+ = PParams f (ps ++ map (mapsnd (expandParams dec ps ns)) params)
551+ (map (expandParamsD True ist dec ps ns) pds)
548-- (map (expandParamsD ist dec ps ns) pds)
552-- (map (expandParamsD ist dec ps ns) pds)
549−expandParamsD ist dec ps ns (PMutual f pds)
553+expandParamsD rhs ist dec ps ns (PMutual f pds)
550− = PMutual f (map (expandParamsD ist dec ps ns) pds)
554+ = PMutual f (map (expandParamsD rhs ist dec ps ns) pds)
551−expandParamsD ist dec ps ns (PClass doc info f cs n params decls)
555+expandParamsD rhs ist dec ps ns (PClass doc info f cs n params decls)
552 = PClass doc info f
556 = PClass doc info f
553 (map (expandParams dec ps ns) cs)
557 (map (expandParams dec ps ns) cs)
555 (map (mapsnd (expandParams dec ps ns)) params)
559 (map (mapsnd (expandParams dec ps ns)) params)
556− (map (expandParamsD ist dec ps ns) decls)
560+ (map (expandParamsD rhs ist dec ps ns) decls)
557−expandParamsD ist dec ps ns (PInstance info f cs n params ty cn decls)
561+expandParamsD rhs ist dec ps ns (PInstance info f cs n params ty cn decls)
558 = PInstance info f
562 = PInstance info f
559 (map (expandParams dec ps ns) cs)
563 (map (expandParams dec ps ns) cs)
561 (map (expandParams dec ps ns) params)
565 (map (expandParams dec ps ns) params)
562 (expandParams dec ps ns ty)
566 (expandParams dec ps ns ty)
564− (map (expandParamsD ist dec ps ns) decls)
568+ (map (expandParamsD rhs ist dec ps ns) decls)
565−expandParamsD ist dec ps ns d = d
569+expandParamsD rhs ist dec ps ns d = d
567mapsnd f (x, t) = (x, f t)
571mapsnd f (x, t) = (x, f t)