diff options
| author | bringert <bringert@cs.chalmers.se> | 2005-11-28 22:39:53 +0000 |
|---|---|---|
| committer | bringert <bringert@cs.chalmers.se> | 2005-11-28 22:39:53 +0000 |
| commit | 884055566e82c1ab9829c75f674838d272ff099f (patch) | |
| tree | 6028a1cc62089651a0f96ab49bf70cff6245524c /src | |
| parent | cb6f3088b578331cac5f42f9bc0489c5bed4e568 (diff) | |
Transfer compilation: Change varibles which are not used to wildcards.
Diffstat (limited to 'src')
| -rw-r--r-- | src/Transfer/SyntaxToCore.hs | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/Transfer/SyntaxToCore.hs b/src/Transfer/SyntaxToCore.hs index 43506db60..308a8a582 100644 --- a/src/Transfer/SyntaxToCore.hs +++ b/src/Transfer/SyntaxToCore.hs @@ -33,6 +33,7 @@ declsToCore_ = deriveDecls optimize :: [Decl] -> C [Decl] optimize = removeUselessMatch + >>> removeUnusedVariables >>> betaReduce newState :: CState @@ -232,7 +233,19 @@ removeUselessMatch = return . map f isSingleFieldPattern x p = case p of PRec [FieldPattern y _] -> x == y _ -> False +-- +-- * Change varibles which are not used to wildcards. +-- +-- FIXME: extend to variables bound in case expressions. +removeUnusedVariables :: [Decl] -> C [Decl] +removeUnusedVariables = return . map f + where + f :: Tree a -> Tree a + f x = case x of + EAbs (VVar id) e | not (id `isFreeIn` e) -> EAbs VWild (f e) + EPi (VVar id) t e | not (id `isFreeIn` e) -> EPi VWild (f t) (f e) + _ -> composOp f x -- -- * Remove simple syntactic sugar. -- |
