| LambdaBodyOf Id -- The lambda-binder
| BodyOfLetRec [Id] -- One of the binders
| CaseAlt CoreAlt -- Case alternative
- | CasePat CoreAlt -- *Pattern* of the case alternative
+ | CasePat CoreAlt -- The *pattern* of the case alternative
| AnExpr CoreExpr -- Some expression
| ImportedUnfolding SrcLoc -- Some imported unfolding (ToDo: say which)
| TopLevelBindings
\begin{code}
data Subst
- = Subst InScopeSet -- Variables in in scope (both Ids and TyVars)
- -- *after* applying the substitution
- IdSubstEnv -- Substitution for Ids
- TvSubstEnv -- Substitution for TyVars
+ = Subst InScopeSet -- Variables in in scope (both Ids and TyVars) /after/
+ -- applying the substitution
+ IdSubstEnv -- Substitution for Ids
+ TvSubstEnv -- Substitution for TyVars
-- INVARIANT 1: The (domain of the) in-scope set is a superset
-- of the free vars of the range of the substitution
no_change = id1 == old_id
-- See Note [Extending the Subst]
- -- *not* necessary to check mb_new_info and no_type_change
+ -- it's /not/ necessary to check mb_new_info and no_type_change
\end{code}
Now a variant that unconditionally allocates a new unique.
arityType dflags (Note _ e) = arityType dflags e
-- Not needed any more: etaExpand is cleverer
--- | ok_note n = arityType dflags e
--- | otherwise = ATop
+-- removed: | ok_note n = arityType dflags e
+-- removed: | otherwise = ATop
arityType dflags (Cast e _) = arityType dflags e
| manifestArity expr >= n = expr -- The no-op case
| otherwise
= eta_expand n us expr ty
- where
-- manifestArity sees how many leading value lambdas there are
manifestArity :: CoreExpr -> Arity
hashExpr e = fromIntegral (hash_expr (1,emptyVarEnv) e .&. 0x7fffffff)
-- UniqFM doesn't like negative Ints
-type HashEnv = (Int, VarEnv Int) -- Hash code for bound variables
+type HashEnv = (Int, VarEnv Int) -- ^ Hash code for bound variables
hash_expr :: HashEnv -> CoreExpr -> Word32
-- Word32, because we're expecting overflows here, and overflowing