[project @ 1996-01-08 20:28:12 by partain]
[ghc-hetmet.git] / ghc / compiler / uniType / UniTyFuns.hi
1 {-# GHC_PRAGMA INTERFACE VERSION 5 #-}
2 interface UniTyFuns where
3 import Bag(Bag)
4 import BasicLit(BasicLit)
5 import BinderInfo(BinderInfo)
6 import CharSeq(CSeq)
7 import Class(Class, ClassOp)
8 import CmdLineOpts(GlobalSwitch)
9 import CoreSyn(CoreAtom, CoreExpr)
10 import Id(Id)
11 import IdEnv(IdEnv(..))
12 import InstEnv(InstTemplate)
13 import MagicUFs(MagicUnfoldingFun)
14 import Maybes(Labda)
15 import NameTypes(FullName, ShortName)
16 import PreludePS(_PackedString)
17 import Pretty(Delay, PprStyle, PrettyRep)
18 import PrimKind(PrimKind)
19 import SimplEnv(FormSummary, UnfoldingDetails, UnfoldingGuidance)
20 import SplitUniq(SplitUniqSupply)
21 import TyCon(TyCon)
22 import TyVar(TyVar, TyVarTemplate)
23 import TyVarEnv(TyVarEnv(..), TypeEnv(..))
24 import UniType(UniType)
25 import UniqFM(UniqFM)
26 import Unique(Unique, UniqueSupply)
27 data Bag a      {-# GHC_PRAGMA EmptyBag | UnitBag a | TwoBags (Bag a) (Bag a) | ListOfBags [Bag a] #-}
28 data Class      {-# GHC_PRAGMA MkClass Unique FullName TyVarTemplate [Class] [Id] [ClassOp] [Id] [Id] [(UniType, InstTemplate)] [(Class, [Class])] #-}
29 type IdEnv a = UniqFM a
30 data Labda a    {-# GHC_PRAGMA Hamna | Ni a #-}
31 data PprStyle   {-# GHC_PRAGMA PprForUser | PprDebug | PprShowAll | PprInterface (GlobalSwitch -> Bool) | PprForC (GlobalSwitch -> Bool) | PprUnfolding (GlobalSwitch -> Bool) | PprForAsm (GlobalSwitch -> Bool) Bool ([Char] -> [Char]) #-}
32 data PrettyRep  {-# GHC_PRAGMA MkPrettyRep CSeq (Delay Int) Bool Bool #-}
33 data PrimKind   {-# GHC_PRAGMA PtrKind | CodePtrKind | DataPtrKind | RetKind | InfoPtrKind | CostCentreKind | CharKind | IntKind | WordKind | AddrKind | FloatKind | DoubleKind | MallocPtrKind | StablePtrKind | ArrayKind | ByteArrayKind | VoidKind #-}
34 data UnfoldingDetails   {-# GHC_PRAGMA NoUnfoldingDetails | LiteralForm BasicLit | OtherLiteralForm [BasicLit] | ConstructorForm Id [UniType] [CoreAtom Id] | OtherConstructorForm [Id] | GeneralForm Bool FormSummary (CoreExpr (Id, BinderInfo) Id) UnfoldingGuidance | MagicForm _PackedString MagicUnfoldingFun | IWantToBeINLINEd UnfoldingGuidance #-}
35 data TyCon      {-# GHC_PRAGMA SynonymTyCon Unique FullName Int [TyVarTemplate] UniType Bool | DataTyCon Unique FullName Int [TyVarTemplate] [Id] [Class] Bool | TupleTyCon Int | PrimTyCon Unique FullName Int ([PrimKind] -> PrimKind) | SpecTyCon TyCon [Labda UniType] #-}
36 data TyVar      {-# GHC_PRAGMA PrimSysTyVar Unique | PolySysTyVar Unique | OpenSysTyVar Unique | UserTyVar Unique ShortName #-}
37 data TyVarTemplate      {-# GHC_PRAGMA SysTyVarTemplate Unique _PackedString | UserTyVarTemplate Unique ShortName #-}
38 type TyVarEnv a = UniqFM a
39 type TypeEnv = UniqFM UniType
40 data UniType    {-# GHC_PRAGMA UniTyVar TyVar | UniFun UniType UniType | UniData TyCon [UniType] | UniSyn TyCon [UniType] UniType | UniDict Class UniType | UniTyVarTemplate TyVarTemplate | UniForall TyVarTemplate UniType #-}
41 data UniqFM a   {-# GHC_PRAGMA EmptyUFM | LeafUFM Int# a | NodeUFM Int# Int# (UniqFM a) (UniqFM a) #-}
42 data UniqueSupply       {-# GHC_PRAGMA MkUniqueSupply Int# | MkNewSupply SplitUniqSupply #-}
43 applyNonSynTyCon :: TyCon -> [UniType] -> UniType
44         {-# GHC_PRAGMA _A_ 2 _U_ 22 _N_ _N_ _F_ _IF_ARGS_ 0 2 XX 3 \ (u0 :: TyCon) (u1 :: [UniType]) -> _!_ _ORIG_ UniType UniData [] [u0, u1] _N_ #-}
45 applySynTyCon :: TyCon -> [UniType] -> UniType
46         {-# GHC_PRAGMA _A_ 2 _U_ 22 _N_ _N_ _N_ _N_ #-}
47 applyTy :: UniType -> UniType -> UniType
48         {-# GHC_PRAGMA _A_ 2 _U_ 12 _N_ _S_ "SL" _N_ _N_ #-}
49 applyTyCon :: TyCon -> [UniType] -> UniType
50         {-# GHC_PRAGMA _A_ 2 _U_ 22 _N_ _S_ "SL" _N_ _N_ #-}
51 applyTypeEnvToThetaTy :: UniqFM UniType -> [(a, UniType)] -> [(a, UniType)]
52         {-# GHC_PRAGMA _A_ 2 _U_ 21 _N_ _S_ "LS" _N_ _N_ #-}
53 applyTypeEnvToTy :: UniqFM UniType -> UniType -> UniType
54         {-# GHC_PRAGMA _A_ 2 _U_ 21 _N_ _S_ "LS" _N_ _N_ #-}
55 cmpUniTypeMaybeList :: [Labda UniType] -> [Labda UniType] -> Int#
56         {-# GHC_PRAGMA _A_ 2 _U_ 11 _N_ _S_ "SS" _N_ _N_ #-}
57 expandVisibleTySyn :: UniType -> UniType
58         {-# GHC_PRAGMA _A_ 1 _U_ 2 _N_ _S_ "S" _N_ _N_ #-}
59 extractTyVarTemplatesFromTy :: UniType -> [TyVarTemplate]
60         {-# GHC_PRAGMA _A_ 1 _U_ 1 _N_ _S_ "S" _N_ _N_ #-}
61 extractTyVarsFromTy :: UniType -> [TyVar]
62         {-# GHC_PRAGMA _A_ 1 _U_ 1 _N_ _S_ "S" _N_ _N_ #-}
63 extractTyVarsFromTys :: [UniType] -> [TyVar]
64         {-# GHC_PRAGMA _A_ 1 _U_ 1 _N_ _S_ "S" _N_ _N_ #-}
65 funResultTy :: UniType -> Int -> UniType
66         {-# GHC_PRAGMA _A_ 2 _U_ 21 _N_ _S_ "SU(P)" {_A_ 2 _U_ 22 _N_ _N_ _N_ _N_} _N_ _N_ #-}
67 getMentionedTyCons :: TyCon -> [TyCon]
68         {-# GHC_PRAGMA _A_ 1 _U_ 1 _N_ _S_ "S" _N_ _N_ #-}
69 getMentionedTyConsAndClassesFromClass :: Class -> (Bag TyCon, Bag Class)
70         {-# GHC_PRAGMA _A_ 1 _U_ 2 _N_ _S_ "U(LLLLLSLLLL)" _N_ _N_ #-}
71 getMentionedTyConsAndClassesFromTyCon :: TyCon -> (Bag TyCon, Bag Class)
72         {-# GHC_PRAGMA _A_ 1 _U_ 2 _N_ _S_ "S" _N_ _N_ #-}
73 getMentionedTyConsAndClassesFromUniType :: UniType -> (Bag TyCon, Bag Class)
74         {-# GHC_PRAGMA _A_ 1 _U_ 1 _N_ _S_ "S" _N_ _N_ #-}
75 getTauType :: UniType -> UniType
76         {-# GHC_PRAGMA _A_ 1 _U_ 2 _N_ _S_ "S" _F_ _IF_ARGS_ 0 1 X 4 \ (u0 :: UniType) -> case _APP_  _ORIG_ UniTyFuns splitType [ u0 ] of { _ALG_ _TUP_3 (u1 :: [TyVarTemplate]) (u2 :: [(Class, UniType)]) (u3 :: UniType) -> u3; _NO_DEFLT_ } _N_ #-}
77 getTyVar :: [Char] -> UniType -> TyVar
78         {-# GHC_PRAGMA _A_ 2 _U_ 21 _N_ _S_ "LS" _N_ _N_ #-}
79 getTyVarMaybe :: UniType -> Labda TyVar
80         {-# GHC_PRAGMA _A_ 1 _U_ 1 _N_ _S_ "S" _N_ _N_ #-}
81 getTyVarTemplateMaybe :: UniType -> Labda TyVarTemplate
82         {-# GHC_PRAGMA _A_ 1 _U_ 1 _N_ _S_ "S" _N_ _N_ #-}
83 getTypeString :: UniType -> [_PackedString]
84         {-# GHC_PRAGMA _A_ 1 _U_ 2 _N_ _S_ "S" _N_ _N_ #-}
85 getUniDataSpecTyCon :: UniType -> (TyCon, [UniType], [Id])
86         {-# GHC_PRAGMA _A_ 1 _U_ 2 _N_ _S_ "S" _N_ _N_ #-}
87 getUniDataSpecTyCon_maybe :: UniType -> Labda (TyCon, [UniType], [Id])
88         {-# GHC_PRAGMA _A_ 1 _U_ 2 _N_ _S_ "S" _N_ _N_ #-}
89 getUniDataTyCon :: UniType -> (TyCon, [UniType], [Id])
90         {-# GHC_PRAGMA _A_ 1 _U_ 2 _N_ _S_ "S" _N_ _N_ #-}
91 getUniDataTyCon_maybe :: UniType -> Labda (TyCon, [UniType], [Id])
92         {-# GHC_PRAGMA _A_ 1 _U_ 2 _N_ _S_ "S" _N_ _N_ #-}
93 getUniTyDescription :: UniType -> [Char]
94         {-# GHC_PRAGMA _A_ 1 _U_ 2 _N_ _S_ "S" _N_ _N_ #-}
95 glueTyArgs :: [UniType] -> UniType -> UniType
96         {-# GHC_PRAGMA _A_ 2 _U_ 12 _N_ _S_ "SL" _N_ _N_ #-}
97 instanceIsExported :: Class -> UniType -> Bool -> Bool
98         {-# GHC_PRAGMA _A_ 3 _U_ 121 _N_ _S_ "U(AU(AASLAA)AAAAAAAA)SL" {_A_ 4 _U_ 2121 _N_ _N_ _N_ _N_} _N_ _N_ #-}
99 isDictTy :: UniType -> Bool
100         {-# GHC_PRAGMA _A_ 1 _U_ 1 _N_ _S_ "S" _N_ _N_ #-}
101 isForAllTy :: UniType -> Bool
102         {-# GHC_PRAGMA _A_ 1 _U_ 1 _N_ _S_ "S" _N_ _N_ #-}
103 isFunType :: UniType -> Bool
104         {-# GHC_PRAGMA _A_ 1 _U_ 2 _N_ _S_ "S" _N_ _N_ #-}
105 isGroundOrTyVarTy :: UniType -> Bool
106         {-# GHC_PRAGMA _A_ 1 _U_ 2 _N_ _S_ "S" _N_ _N_ #-}
107 isGroundTy :: UniType -> Bool
108         {-# GHC_PRAGMA _A_ 1 _U_ 1 _N_ _S_ "S" _N_ _N_ #-}
109 isLeakFreeType :: [TyCon] -> UniType -> Bool
110         {-# GHC_PRAGMA _A_ 2 _U_ 21 _N_ _S_ "LS" _N_ _N_ #-}
111 isPrimType :: UniType -> Bool
112         {-# GHC_PRAGMA _A_ 1 _U_ 1 _N_ _S_ "S" _N_ _N_ #-}
113 isTauTy :: UniType -> Bool
114         {-# GHC_PRAGMA _A_ 1 _U_ 1 _N_ _S_ "S" _N_ _N_ #-}
115 isTyVarTemplateTy :: UniType -> Bool
116         {-# GHC_PRAGMA _A_ 1 _U_ 1 _N_ _S_ "S" _N_ _N_ #-}
117 isTyVarTy :: UniType -> Bool
118         {-# GHC_PRAGMA _A_ 1 _U_ 1 _N_ _S_ "S" _N_ _N_ #-}
119 isUnboxedDataType :: UniType -> Bool
120         {-# GHC_PRAGMA _A_ 1 _U_ 1 _N_ _S_ "S" _N_ _N_ #-}
121 kindFromType :: UniType -> PrimKind
122         {-# GHC_PRAGMA _A_ 1 _U_ 1 _N_ _S_ "S" _N_ _N_ #-}
123 mapOverTyVars :: (TyVar -> UniType) -> UniType -> UniType
124         {-# GHC_PRAGMA _A_ 2 _U_ 21 _N_ _S_ "LS" _N_ _N_ #-}
125 matchTy :: UniType -> UniType -> Labda [(TyVarTemplate, UniType)]
126         {-# GHC_PRAGMA _A_ 2 _U_ 22 _N_ _S_ "SL" _N_ _N_ #-}
127 maybeBoxedPrimType :: UniType -> Labda (Id, UniType)
128         {-# GHC_PRAGMA _A_ 1 _U_ 2 _N_ _S_ "S" _N_ _N_ #-}
129 maybePurelyLocalClass :: Class -> Labda [Int -> Bool -> PrettyRep]
130         {-# GHC_PRAGMA _A_ 1 _U_ 2 _N_ _S_ "U(LLLLLSLLLL)" _N_ _N_ #-}
131 maybePurelyLocalTyCon :: TyCon -> Labda [Int -> Bool -> PrettyRep]
132         {-# GHC_PRAGMA _A_ 1 _U_ 2 _N_ _S_ "S" _N_ _N_ #-}
133 maybePurelyLocalType :: UniType -> Labda [Int -> Bool -> PrettyRep]
134         {-# GHC_PRAGMA _A_ 1 _U_ 1 _N_ _S_ "S" _N_ _N_ #-}
135 maybeUnpackFunTy :: UniType -> Labda (UniType, UniType)
136         {-# GHC_PRAGMA _A_ 1 _U_ 2 _N_ _S_ "S" _N_ _N_ #-}
137 mkSuperDictSelType :: Class -> Class -> UniType
138         {-# GHC_PRAGMA _A_ 2 _U_ 22 _N_ _S_ "U(LLLLLLLLLL)L" _N_ _N_ #-}
139 pprClassOp :: PprStyle -> ClassOp -> Int -> Bool -> PrettyRep
140         {-# GHC_PRAGMA _A_ 2 _U_ 2122 _N_ _S_ "SU(LAL)" {_A_ 3 _U_ 22222 _N_ _N_ _N_ _N_} _N_ _N_ #-}
141 pprIfaceClass :: (GlobalSwitch -> Bool) -> (Id -> Id) -> UniqFM UnfoldingDetails -> Class -> Int -> Bool -> PrettyRep
142         {-# GHC_PRAGMA _A_ 4 _U_ 222122 _N_ _S_ "LLLU(ALLLLLLLAA)" _N_ _N_ #-}
143 pprMaybeTy :: PprStyle -> Labda UniType -> Int -> Bool -> PrettyRep
144         {-# GHC_PRAGMA _A_ 2 _U_ 2122 _N_ _S_ "SS" _N_ _N_ #-}
145 pprParendUniType :: PprStyle -> UniType -> Int -> Bool -> PrettyRep
146         {-# GHC_PRAGMA _A_ 2 _U_ 2222 _N_ _S_ "LS" _N_ _N_ #-}
147 pprTyCon :: PprStyle -> TyCon -> [[Labda UniType]] -> Int -> Bool -> PrettyRep
148         {-# GHC_PRAGMA _A_ 3 _U_ 22222 _N_ _S_ "SSL" _N_ _N_ #-}
149 pprUniType :: PprStyle -> UniType -> Int -> Bool -> PrettyRep
150         {-# GHC_PRAGMA _A_ 2 _U_ 2222 _N_ _S_ "LS" _N_ _N_ #-}
151 returnsRealWorld :: UniType -> Bool
152         {-# GHC_PRAGMA _A_ 1 _U_ 1 _N_ _S_ "S" _N_ _N_ #-}
153 showTyCon :: PprStyle -> TyCon -> [Char]
154         {-# GHC_PRAGMA _A_ 2 _U_ 22 _N_ _S_ "SS" _N_ _N_ #-}
155 showTypeCategory :: UniType -> Char
156         {-# GHC_PRAGMA _A_ 1 _U_ 2 _N_ _S_ "S" _N_ _N_ #-}
157 specMaybeTysSuffix :: [Labda UniType] -> _PackedString
158         {-# GHC_PRAGMA _A_ 1 _U_ 1 _N_ _S_ "S" _N_ _N_ #-}
159 specialiseTy :: UniType -> [Labda UniType] -> Int -> UniType
160         {-# GHC_PRAGMA _A_ 3 _U_ 211 _N_ _S_ "SLL" _N_ _N_ #-}
161 splitDictType :: UniType -> (Class, UniType)
162         {-# GHC_PRAGMA _A_ 1 _U_ 1 _N_ _S_ "S" _N_ _N_ #-}
163 splitForalls :: UniType -> ([TyVarTemplate], UniType)
164         {-# GHC_PRAGMA _A_ 1 _U_ 2 _N_ _S_ "S" _N_ _N_ #-}
165 splitTyArgs :: UniType -> ([UniType], UniType)
166         {-# GHC_PRAGMA _A_ 1 _U_ 2 _N_ _S_ "S" _N_ _N_ #-}
167 splitType :: UniType -> ([TyVarTemplate], [(Class, UniType)], UniType)
168         {-# GHC_PRAGMA _A_ 1 _U_ 2 _N_ _S_ "S" _N_ _N_ #-}
169 splitTypeWithDictsAsArgs :: UniType -> ([TyVarTemplate], [UniType], UniType)
170         {-# GHC_PRAGMA _A_ 1 _U_ 2 _N_ _S_ "S" _N_ _N_ #-}
171 typeMaybeString :: Labda UniType -> [_PackedString]
172         {-# GHC_PRAGMA _A_ 1 _U_ 1 _N_ _S_ "S" _N_ _N_ #-}
173 unDictifyTy :: UniType -> UniType
174         {-# GHC_PRAGMA _A_ 1 _U_ 2 _N_ _S_ "S" _N_ _N_ #-}
175