really is} just like @CoreSyntax@.)
\begin{code}
-#include "HsVersions.h"
-
module AnnCoreSyn (
- AnnCoreBinding(..), AnnCoreExpr(..),
+ AnnCoreBinding(..), AnnCoreExpr,
AnnCoreExpr'(..), -- v sad that this must be exported
AnnCoreCaseAlts(..), AnnCoreCaseDefault(..),
deAnnotate -- we may eventually export some of the other deAnners
) where
-import Ubiq{-uitous-}
+#include "HsVersions.h"
import CoreSyn
+
+import Id ( Id )
+import Literal ( Literal )
+import PrimOp ( PrimOp )
+import CostCentre ( CostCentre )
+import Type ( GenType )
+
\end{code}
\begin{code}
-data AnnCoreBinding val_bdr val_occ tyvar uvar annot
- = AnnNonRec val_bdr (AnnCoreExpr val_bdr val_occ tyvar uvar annot)
- | AnnRec [(val_bdr, AnnCoreExpr val_bdr val_occ tyvar uvar annot)]
+data AnnCoreBinding val_bdr val_occ flexi annot
+ = AnnNonRec val_bdr (AnnCoreExpr val_bdr val_occ flexi annot)
+ | AnnRec [(val_bdr, AnnCoreExpr val_bdr val_occ flexi annot)]
\end{code}
\begin{code}
-type AnnCoreExpr val_bdr val_occ tyvar uvar annot
- = (annot, AnnCoreExpr' val_bdr val_occ tyvar uvar annot)
+type AnnCoreExpr val_bdr val_occ flexi annot
+ = (annot, AnnCoreExpr' val_bdr val_occ flexi annot)
-data AnnCoreExpr' val_bdr val_occ tyvar uvar annot
+data AnnCoreExpr' val_bdr val_occ flexi annot
= AnnVar val_occ
| AnnLit Literal
- | AnnCon Id [GenCoreArg val_occ tyvar uvar]
- | AnnPrim PrimOp [GenCoreArg val_occ tyvar uvar]
-
- | AnnLam (GenCoreBinder val_bdr tyvar uvar)
- (AnnCoreExpr val_bdr val_occ tyvar uvar annot)
+ | AnnCon Id [GenCoreArg val_occ flexi]
+ | AnnPrim PrimOp [GenCoreArg val_occ flexi]
- | AnnApp (AnnCoreExpr val_bdr val_occ tyvar uvar annot)
- (GenCoreArg val_occ tyvar uvar)
+ | AnnLam (GenCoreBinder val_bdr flexi)
+ (AnnCoreExpr val_bdr val_occ flexi annot)
- | AnnCase (AnnCoreExpr val_bdr val_occ tyvar uvar annot)
- (AnnCoreCaseAlts val_bdr val_occ tyvar uvar annot)
+ | AnnApp (AnnCoreExpr val_bdr val_occ flexi annot)
+ (GenCoreArg val_occ flexi)
- | AnnLet (AnnCoreBinding val_bdr val_occ tyvar uvar annot)
- (AnnCoreExpr val_bdr val_occ tyvar uvar annot)
+ | AnnCase (AnnCoreExpr val_bdr val_occ flexi annot)
+ (AnnCoreCaseAlts val_bdr val_occ flexi annot)
- | AnnSCC CostCentre
- (AnnCoreExpr val_bdr val_occ tyvar uvar annot)
+ | AnnLet (AnnCoreBinding val_bdr val_occ flexi annot)
+ (AnnCoreExpr val_bdr val_occ flexi annot)
- | AnnCoerce Coercion
- (GenType tyvar uvar)
- (AnnCoreExpr val_bdr val_occ tyvar uvar annot)
+ | AnnNote (CoreNote flexi)
+ (AnnCoreExpr val_bdr val_occ flexi annot)
\end{code}
\begin{code}
-data AnnCoreCaseAlts val_bdr val_occ tyvar uvar annot
+data AnnCoreCaseAlts val_bdr val_occ flexi annot
= AnnAlgAlts [(Id,
[val_bdr],
- AnnCoreExpr val_bdr val_occ tyvar uvar annot)]
- (AnnCoreCaseDefault val_bdr val_occ tyvar uvar annot)
+ AnnCoreExpr val_bdr val_occ flexi annot)]
+ (AnnCoreCaseDefault val_bdr val_occ flexi annot)
| AnnPrimAlts [(Literal,
- AnnCoreExpr val_bdr val_occ tyvar uvar annot)]
- (AnnCoreCaseDefault val_bdr val_occ tyvar uvar annot)
+ AnnCoreExpr val_bdr val_occ flexi annot)]
+ (AnnCoreCaseDefault val_bdr val_occ flexi annot)
-data AnnCoreCaseDefault val_bdr val_occ tyvar uvar annot
+data AnnCoreCaseDefault val_bdr val_occ flexi annot
= AnnNoDefault
| AnnBindDefault val_bdr
- (AnnCoreExpr val_bdr val_occ tyvar uvar annot)
+ (AnnCoreExpr val_bdr val_occ flexi annot)
\end{code}
\begin{code}
-deAnnotate :: AnnCoreExpr val_bdr val_occ tyvar uvar ann
- -> GenCoreExpr val_bdr val_occ tyvar uvar
+deAnnotate :: AnnCoreExpr val_bdr val_occ flexi ann
+ -> GenCoreExpr val_bdr val_occ flexi
deAnnotate (_, AnnVar v) = Var v
deAnnotate (_, AnnLit lit) = Lit lit
deAnnotate (_, AnnPrim op args) = Prim op args
deAnnotate (_, AnnLam binder body)= Lam binder (deAnnotate body)
deAnnotate (_, AnnApp fun arg) = App (deAnnotate fun) arg
-deAnnotate (_, AnnSCC lbl body) = SCC lbl (deAnnotate body)
-deAnnotate (_, AnnCoerce c ty body) = Coerce c ty (deAnnotate body)
+deAnnotate (_, AnnNote note body) = Note note (deAnnotate body)
deAnnotate (_, AnnLet bind body)
= Let (deAnnBind bind) (deAnnotate body)