[project @ 1996-03-19 08:58:34 by partain]
[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         ( MagicUnfoldingFun )
21 import Outputable       ( Outputable(..) )
22 import PprStyle         ( PprStyle )
23 import PprType          ( pprParendType )
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 pprParendType           :: (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 type IdEnv a = UniqFM a
46 type CoreExpr = GenCoreExpr (GenId (GenType (GenTyVar (GenUsage Unique)) Unique))
47                             (GenId (GenType (GenTyVar (GenUsage Unique)) Unique))
48                             (GenTyVar (GenUsage Unique)) Unique
49
50 instance Outputable UnfoldingGuidance
51 instance Eq         Unique
52 instance Outputable Unique
53 instance Eq         (GenTyVar a)
54 instance Ord3       (GenTyVar a)
55 instance Outputable (GenTyVar a)
56 instance (Outputable a) => Outputable (GenId a)
57 instance (Eq a, Outputable a, Eq b, Outputable b) => Outputable (GenType a b)
58
59 data MagicUnfoldingFun
60 data FormSummary   = WhnfForm | BottomForm | OtherForm
61 data UnfoldingDetails
62   = NoUnfoldingDetails
63   | LitForm Literal
64   | OtherLitForm [Literal]
65   | ConForm (GenId (GenType (GenTyVar (GenUsage Unique)) Unique)) [GenCoreArg (GenId (GenType (GenTyVar (GenUsage Unique)) Unique)) (GenTyVar (GenUsage Unique)) Unique]
66   | OtherConForm [GenId (GenType (GenTyVar (GenUsage Unique)) Unique)]
67   | GenForm Bool FormSummary (GenCoreExpr (GenId (GenType (GenTyVar (GenUsage Unique)) Unique), BinderInfo) (GenId (GenType (GenTyVar (GenUsage Unique)) Unique)) (GenTyVar (GenUsage Unique)) Unique) UnfoldingGuidance
68   | MagicForm _PackedString MagicUnfoldingFun
69
70 data UnfoldingGuidance
71   = UnfoldNever
72   | UnfoldAlways
73   | EssentialUnfolding
74   | UnfoldIfGoodArgs Int Int [Bool] Int
75   | BadUnfolding
76 \end{code}