86680a8caa7fcf88d268e8df83d4557a0892b6e6
[ghc-hetmet.git] / ghc / compiler / basicTypes / IdLoop.lhi
1 Breaks the IdInfo/<everything> loops.
2
3 \begin{code}
4 interface IdLoop where
5
6 import PreludePS        ( _PackedString )
7 import PreludeStdIO     ( Maybe )
8
9 import BinderInfo       ( BinderInfo )
10 import CoreSyn          ( CoreExpr(..), GenCoreExpr, GenCoreArg )
11 import CoreUnfold       ( Unfolding(..), UnfoldingGuidance(..), 
12                           SimpleUnfolding(..), FormSummary(..), noUnfolding  )
13 import CoreUtils        ( unTagBinders )
14 import Id               ( externallyVisibleId, isDataCon, isWorkerId, isWrapperId,
15                           unfoldingUnfriendlyId, getIdInfo, nmbrId,
16                           nullIdEnv, lookupIdEnv, IdEnv(..),
17                           Id(..), GenId
18                         )
19 import CostCentre       ( CostCentre )
20 import IdInfo           ( IdInfo )
21 import SpecEnv          ( SpecEnv, nullSpecEnv, isNullSpecEnv )
22 import Literal          ( Literal )
23 import MagicUFs         ( mkMagicUnfoldingFun, MagicUnfoldingFun )
24 import OccurAnal        ( occurAnalyseGlobalExpr )
25 import Outputable       ( Outputable(..) )
26 import PprEnv           ( NmbrEnv )
27 import PprStyle         ( PprStyle )
28 import PprType          ( pprParendGenType )
29 import Pretty           ( PrettyRep )
30 import Type             ( GenType )
31 import TyVar            ( GenTyVar )
32 import UniqFM           ( UniqFM )
33 import Unique           ( Unique )
34 import Usage            ( GenUsage )
35 import Util             ( Ord3(..) )
36 import WwLib            ( mAX_WORKER_ARGS )
37 import StdIdInfo        ( addStandardIdInfo )   -- Used in Id, but StdIdInfo needs lots of stuff from Id
38
39 addStandardIdInfo :: Id -> Id
40
41 nullSpecEnv   :: SpecEnv
42 isNullSpecEnv :: SpecEnv -> Bool
43
44 -- occurAnalyseGlobalExpr  :: GenCoreExpr (GenId (GenType (GenTyVar (GenUsage Unique)) Unique)) (GenId (GenType (GenTyVar (GenUsage Unique)) Unique)) (GenTyVar (GenUsage Unique)) Unique -> GenCoreExpr (GenId (GenType (GenTyVar (GenUsage Unique)) Unique), BinderInfo) (GenId (GenType (GenTyVar (GenUsage Unique)) Unique)) (GenTyVar (GenUsage Unique)) Unique
45 -- unTagBinders :: GenCoreExpr (GenId (GenType (GenTyVar (GenUsage Unique)) Unique), a) b c d -> GenCoreExpr (GenId (GenType (GenTyVar (GenUsage Unique)) Unique)) b c d
46
47 externallyVisibleId     :: Id       -> Bool
48 isDataCon               :: GenId ty -> Bool
49 isWorkerId              :: GenId ty -> Bool
50 isWrapperId             :: Id       -> Bool
51 unfoldingUnfriendlyId   :: Id       -> Bool
52 getIdInfo               :: Id       -> IdInfo
53 nullIdEnv               :: UniqFM a
54 lookupIdEnv             :: UniqFM b -> GenId a -> Maybe b
55 mAX_WORKER_ARGS         :: Int
56 nmbrId                  :: Id -> NmbrEnv -> (NmbrEnv, Id)
57 pprParendGenType        :: (Eq a, Outputable a, Eq b, Outputable b) => PprStyle -> GenType a b -> Int -> Bool -> PrettyRep
58 mkMagicUnfoldingFun     :: Unique -> MagicUnfoldingFun
59
60 type IdEnv a = UniqFM a
61 type CoreExpr = GenCoreExpr (GenId (GenType (GenTyVar (GenUsage Unique)) Unique))
62                             (GenId (GenType (GenTyVar (GenUsage Unique)) Unique))
63                             (GenTyVar (GenUsage Unique)) Unique
64
65 instance Outputable UnfoldingGuidance
66 instance Eq         Unique
67 instance Outputable Unique
68 instance Eq         (GenTyVar a)
69 instance Ord3       (GenTyVar a)
70 instance Outputable (GenTyVar a)
71 instance (Outputable a) => Outputable (GenId a)
72 instance (Eq a, Outputable a, Eq b, Outputable b) => Outputable (GenType a b)
73
74 data SpecEnv
75 data NmbrEnv
76 data MagicUnfoldingFun
77 data FormSummary = VarForm | ValueForm | BottomForm | OtherForm
78
79 -- data Unfolding
80 --  = NoUnfolding
81 --  | CoreUnfolding SimpleUnfolding
82 --  | MagicUnfolding Unique MagicUnfoldingFun
83
84 data Unfolding
85 noUnfolding :: Unfolding
86
87 -- data SimpleUnfolding = SimpleUnfolding FormSummary UnfoldingGuidance (GenCoreExpr (GenId (GenType (GenTyVar (GenUsage Unique)) Unique), BinderInfo) (GenId (GenType (GenTyVar (GenUsage Unique)) Unique)) (GenTyVar (GenUsage Unique)) Unique) 
88
89
90 data UnfoldingGuidance
91   = UnfoldNever
92   | UnfoldAlways
93   | UnfoldIfGoodArgs Int Int [Bool] Int
94
95 data CostCentre
96 \end{code}
97
98
99
100