[project @ 1996-06-05 06:44:31 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, 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   | OtherLitForm [Literal]
69   | OtherConForm [GenId (GenType (GenTyVar (GenUsage Unique)) Unique)]
70   | GenForm FormSummary (GenCoreExpr (GenId (GenType (GenTyVar (GenUsage Unique)) Unique), BinderInfo) (GenId (GenType (GenTyVar (GenUsage Unique)) Unique)) (GenTyVar (GenUsage Unique)) Unique) UnfoldingGuidance
71   | MagicForm _PackedString MagicUnfoldingFun
72
73 data UnfoldingGuidance
74   = UnfoldNever
75   | UnfoldAlways
76   | EssentialUnfolding
77   | UnfoldIfGoodArgs Int Int [Bool] Int
78   | BadUnfolding
79 \end{code}