@@ -523,30 +523,32 @@ caseGroups (v:vs) gs err = do g <- altGroups gs
523523 = (:) <$> altConstGroup c args <*> altGroups cs
524524
525525 altGroup n i args = do inacc <- inaccessibleArgs n
526− (newArgs, nextCs, [], []) <- argsToAlt args
527− matchCs <- match (newArgs ++ vs) nextCs err
528− return $ ConCase n i newArgs matchCs
526+ (newVars, accVars, inaccVars, nextCs) <- argsToAlt inacc args
527+ matchCs <- match (accVars ++ vs ++ inaccVars) nextCs err
528+ return $ ConCase n i newVars matchCs
529529
530− altFnGroup n args = do (newArgs, nextCs, [], []) <- argsToAlt args
531− matchCs <- match (newArgs ++ vs) nextCs err
532− return $ FnCase n newArgs matchCs
530+ altFnGroup n args = do (newVars, _, [], nextCs) <- argsToAlt [] args
531+ matchCs <- match (newVars ++ vs) nextCs err
532+ return $ FnCase n newVars matchCs
533533
534− altSucGroup args = do ([newArg], nextCs, [], []) <- argsToAlt args
535− matchCs <- match (newArg:vs) nextCs err
536− return $ SucCase newArg matchCs
534+ altSucGroup args = do ([newVar], _, [], nextCs) <- argsToAlt [] args
535+ matchCs <- match (newVar:vs) nextCs err
536+ return $ SucCase newVar matchCs
537537
538− altConstGroup n args = do (_, nextCs, [], []) <- argsToAlt args
538+ altConstGroup n args = do (_, _, [], nextCs) <- argsToAlt [] args
539539 matchCs <- match vs nextCs err
540540 return $ ConstCase n matchCs
541541
542542-- Returns:
543−-- * names of accessible variables + corresponding clauses
544−-- * names of inaccessible variables + corresponding clauses
545−argsToAlt :: [([Pat], Clause)] -> CaseBuilder ([Name], [Clause], [Name], [Clause])
546−argsToAlt [] = return ([], [], [], [])
547−argsToAlt rs@((r, m) : rest)
543+-- * names of all variables arising from match
544+-- * names of accessible variables (subset of all variables)
545+-- * names of inaccessible variables (subset of all variables)
546+-- * clauses corresponding to (accVars ++ origVars ++ inaccVars)
547+argsToAlt :: [Int] -> [([Pat], Clause)] -> CaseBuilder ([Name], [Name], [Name], [Clause])
548+argsToAlt _ [] = return ([], [], [], [])
549+argsToAlt inacc rs@((r, m) : rest)
548550 = do newArgs <- getNewVars r
549− return (newArgs, addRs rs, [], [])
551+ return (newArgs, newArgs, [], addRs rs)
550552 where
551553 getNewVars [] = return []
552554 getNewVars ((PV n t) : ns) = do v <- getVar "e"