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