summaryrefslogtreecommitdiff
path: root/src/Transfer/SyntaxToCore.hs
diff options
context:
space:
mode:
authorbringert <bringert@cs.chalmers.se>2005-11-28 22:39:53 +0000
committerbringert <bringert@cs.chalmers.se>2005-11-28 22:39:53 +0000
commit884055566e82c1ab9829c75f674838d272ff099f (patch)
tree6028a1cc62089651a0f96ab49bf70cff6245524c /src/Transfer/SyntaxToCore.hs
parentcb6f3088b578331cac5f42f9bc0489c5bed4e568 (diff)
Transfer compilation: Change varibles which are not used to wildcards.
Diffstat (limited to 'src/Transfer/SyntaxToCore.hs')
-rw-r--r--src/Transfer/SyntaxToCore.hs13
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.
--