bdc4f120ffdada61da22c118f6fc919c7e5a910e
[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       ( FormSummary(..), UnfoldingDetails(..), UnfoldingGuidance(..) )
12 import CoreUtils        ( unTagBinders )
13 import Id               ( externallyVisibleId, isDataCon, isWorkerId, isWrapperId,
14                           unfoldingUnfriendlyId, getIdInfo,
15                           nullIdEnv, lookupIdEnv, IdEnv(..),
16                           Id(..), GenId
17                         )
18 import IdInfo           ( IdInfo )
19 import Literal          ( Literal )
20 import MagicUFs         ( mkMagicUnfoldingFun, MagicUnfoldingFun )
21 import Outputable       ( Outputable(..) )
22 import PprStyle         ( PprStyle )
23 import PprType          ( pprParendGenType )
24 import Pretty           ( PrettyRep )
25 import Type             ( GenType )
26 import TyVar            ( GenTyVar )
27 import UniqFM           ( UniqFM )
28 import Unique           ( Unique )
29 import Usage            ( GenUsage )
30 import Util             ( Ord3(..) )
31 import WwLib            ( mAX_WORKER_ARGS )
32
33 externallyVisibleId     :: Id       -> Bool
34 isDataCon               :: GenId ty -> Bool
35 isWorkerId              :: GenId ty -> Bool
36 isWrapperId             :: Id       -> Bool
37 unfoldingUnfriendlyId   :: Id       -> Bool
38 getIdInfo               :: Id       -> IdInfo
39 nullIdEnv               :: UniqFM a
40 lookupIdEnv             :: UniqFM b -> GenId a -> Maybe b
41 mAX_WORKER_ARGS         :: Int
42 pprParendGenType                :: (Eq a, Outputable a, Eq b, Outputable b) => PprStyle -> GenType a b -> Int -> Bool -> PrettyRep
43 unTagBinders :: GenCoreExpr (GenId (GenType (GenTyVar (GenUsage Unique)) Unique), a) b c d -> GenCoreExpr (GenId (GenType (GenTyVar (GenUsage Unique)) Unique)) b c d
44
45 mkMagicUnfoldingFun     :: Unique -> MagicUnfoldingFun
46
47 type IdEnv a = UniqFM a
48 type CoreExpr = GenCoreExpr (GenId (GenType (GenTyVar (GenUsage Unique)) Unique))
49                             (GenId (GenType (GenTyVar (GenUsage Unique)) Unique))
50                             (GenTyVar (GenUsage Unique)) Unique
51
52 instance Outputable UnfoldingGuidance
53 instance Eq         Unique
54 instance Outputable Unique
55 instance Eq         (GenTyVar a)
56 instance Ord3       (GenTyVar a)
57 instance Outputable (GenTyVar a)
58 instance (Outputable a) => Outputable (GenId a)
59 instance (Eq a, Outputable a, Eq b, Outputable b) => Outputable (GenType a b)
60
61 data MagicUnfoldingFun
62 data FormSummary   = WhnfForm | BottomForm | OtherForm
63 data UnfoldingDetails
64   = NoUnfoldingDetails
65   | LitForm Literal
66   | OtherLitForm [Literal]
67   | ConForm (GenId (GenType (GenTyVar (GenUsage Unique)) Unique)) [GenCoreArg (GenId (GenType (GenTyVar (GenUsage Unique)) Unique)) (GenTyVar (GenUsage Unique)) Unique]
68   | OtherConForm [GenId (GenType (GenTyVar (GenUsage Unique)) Unique)]
69   | GenForm Bool FormSummary (GenCoreExpr (GenId (GenType (GenTyVar (GenUsage Unique)) Unique), BinderInfo) (GenId (GenType (GenTyVar (GenUsage Unique)) Unique)) (GenTyVar (GenUsage Unique)) Unique) UnfoldingGuidance
70   | MagicForm _PackedString MagicUnfoldingFun
71
72 data UnfoldingGuidance
73   = UnfoldNever
74   | UnfoldAlways
75   | EssentialUnfolding
76   | UnfoldIfGoodArgs Int Int [Bool] Int
77   | BadUnfolding
78 \end{code}