diff options
Diffstat (limited to 'snug-clean/src/Snug/Syntax.icl')
-rw-r--r-- | snug-clean/src/Snug/Syntax.icl | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/snug-clean/src/Snug/Syntax.icl b/snug-clean/src/Snug/Syntax.icl index f886750..839e067 100644 --- a/snug-clean/src/Snug/Syntax.icl +++ b/snug-clean/src/Snug/Syntax.icl @@ -1 +1,35 @@ implementation module Snug.Syntax + +import qualified Data.Set +from Data.Set import :: Set +import StdEnv + +none = 'Data.Set'.newSet + +instance usedSymbols [a] | usedSymbols a +where + usedSymbols xs = 'Data.Set'.unions (map usedSymbols xs) + +instance usedSymbols (a, b) | usedSymbols a & usedSymbols b +where + usedSymbols (x,y) = 'Data.Set'.union (usedSymbols x) (usedSymbols y) + +instance usedSymbols CaseAlternative +where + usedSymbols (CaseAlternative pat expr) = + 'Data.Set'.difference (usedSymbols expr) (usedSymbols pat) + +instance usedSymbols Expression +where + usedSymbols (BasicValue _) = none + usedSymbols (Symbol sym) = none + usedSymbols (Constructor _) = none + usedSymbols (Case e alts) = usedSymbols (e, alts) + usedSymbols (ExpApp e1 e2) = usedSymbols (e1, e2) + +instance usedSymbols Pattern +where + usedSymbols Wildcard = none + usedSymbols (BasicValuePattern _) = none + usedSymbols (IdentPattern id) = 'Data.Set'.singleton id + usedSymbols (ConstructorPattern _ syms) = 'Data.Set'.fromList syms |