See also: the ``library'' for the ``back end'' (@SaBackLib@).
\begin{code}
+#ifndef OLD_STRICTNESS
+module SaLib () where
+#else
+
module SaLib (
AbsVal(..),
AnalysisKind(..),
#include "HsVersions.h"
-import Id ( Id )
-import CoreSyn ( CoreExpr )
+import Type ( Type )
import VarEnv
import IdInfo ( StrictnessInfo(..) )
-import Demand ( Demand, pprDemands )
+import Demand ( Demand )
import Outputable
\end{code}
data AnalysisKind
= StrAnal -- We're doing strictness analysis
| AbsAnal -- We're doing absence analysis
- deriving Text
+ deriving Show
\end{code}
@AbsVal@ is the data type of HNF abstract values.
-- AbsProd [AbsBot, ..., AbsBot]
| AbsFun -- An abstract function, with the given:
- Id -- argument
- CoreExpr -- body
- AbsValEnv -- and environment
+ Type -- Type of the *argument* to the function
+ (AbsVal -> AbsVal) -- The function
| AbsApproxFun -- This is used to represent a coarse
[Demand] -- approximation to a function value. It's an
ppr AbsTop = ptext SLIT("AbsTop")
ppr AbsBot = ptext SLIT("AbsBot")
ppr (AbsProd prod) = hsep [ptext SLIT("AbsProd"), ppr prod]
- ppr (AbsFun arg body env)
- = hsep [ptext SLIT("AbsFun{"), ppr arg,
- ptext SLIT("???"), -- text "}{env:", ppr (keysFM env `zip` eltsFM env),
- char '}' ]
+ ppr (AbsFun bndr_ty body) = ptext SLIT("AbsFun")
ppr (AbsApproxFun demands val)
- = hsep [ptext SLIT("AbsApprox "), hcat (map ppr demands), ppr val]
+ = ptext SLIT("AbsApprox") <+> brackets (interpp'SP demands) <+> ppr val
\end{code}
%-----------
StrAnal -> AbsBot
AbsAnal -> AbsTop
\end{code}
+
+\begin{code}
+#endif /* OLD_STRICTNESS */
+\end{code}