55e20fc3cf62e40140ac2a29004b49ad555e58b4
[ghc-hetmet.git] / compiler / typecheck / TcType.lhs
1
2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
3 %
4 \section[TcType]{Types used in the typechecker}
5
6 This module provides the Type interface for front-end parts of the 
7 compiler.  These parts 
8
9         * treat "source types" as opaque: 
10                 newtypes, and predicates are meaningful. 
11         * look through usage types
12
13 The "tc" prefix is for "typechechecker", because the type checker
14 is the principal client.
15
16 \begin{code}
17 module TcType (
18   --------------------------------
19   -- Types 
20   TcType, TcSigmaType, TcRhoType, TcTauType, TcPredType, TcThetaType, 
21   TcTyVar, TcTyVarSet, TcKind, 
22
23   BoxyTyVar, BoxySigmaType, BoxyRhoType, BoxyThetaType, BoxyType,
24
25   --------------------------------
26   -- MetaDetails
27   UserTypeCtxt(..), pprUserTypeCtxt,
28   TcTyVarDetails(..), BoxInfo(..), pprTcTyVarDetails,
29   MetaDetails(Flexi, Indirect), SkolemInfo(..), pprSkolTvBinding, pprSkolInfo,
30   isImmutableTyVar, isSkolemTyVar, isMetaTyVar, isBoxyTyVar, isSigTyVar, isExistentialTyVar, 
31   metaTvRef, 
32   isFlexi, isIndirect, 
33
34   --------------------------------
35   -- Builders
36   mkPhiTy, mkSigmaTy, 
37
38   --------------------------------
39   -- Splitters  
40   -- These are important because they do not look through newtypes
41   tcView,
42   tcSplitForAllTys, tcSplitPhiTy, 
43   tcSplitFunTy_maybe, tcSplitFunTys, tcFunArgTy, tcFunResultTy, tcSplitFunTysN,
44   tcSplitTyConApp, tcSplitTyConApp_maybe, tcTyConAppTyCon, tcTyConAppArgs,
45   tcSplitAppTy_maybe, tcSplitAppTy, tcSplitAppTys, repSplitAppTy_maybe,
46   tcValidInstHeadTy, tcGetTyVar_maybe, tcGetTyVar,
47   tcSplitSigmaTy, tcMultiSplitSigmaTy, 
48
49   ---------------------------------
50   -- Predicates. 
51   -- Again, newtypes are opaque
52   tcEqType, tcEqTypes, tcEqPred, tcCmpType, tcCmpTypes, tcCmpPred, tcEqTypeX,
53   eqKind, 
54   isSigmaTy, isOverloadedTy, isRigidTy, isBoxyTy,
55   isDoubleTy, isFloatTy, isIntTy, isStringTy,
56   isIntegerTy, isBoolTy, isUnitTy,
57   isTauTy, isTauTyCon, tcIsTyVarTy, tcIsForAllTy, 
58
59   ---------------------------------
60   -- Misc type manipulators
61   deNoteType, classesOfTheta,
62   tyClsNamesOfType, tyClsNamesOfDFunHead, 
63   getDFunTyKey,
64
65   ---------------------------------
66   -- Predicate types  
67   getClassPredTys_maybe, getClassPredTys, 
68   isClassPred, isTyVarClassPred, isEqPred, 
69   mkDictTy, tcSplitPredTy_maybe, 
70   isPredTy, isDictTy, tcSplitDFunTy, tcSplitDFunHead, predTyUnique, 
71   mkClassPred, isInheritablePred, isLinearPred, isIPPred, mkPredName, 
72   dataConsStupidTheta, isRefineableTy,
73
74   ---------------------------------
75   -- Foreign import and export
76   isFFIArgumentTy,     -- :: DynFlags -> Safety -> Type -> Bool
77   isFFIImportResultTy, -- :: DynFlags -> Type -> Bool
78   isFFIExportResultTy, -- :: Type -> Bool
79   isFFIExternalTy,     -- :: Type -> Bool
80   isFFIDynArgumentTy,  -- :: Type -> Bool
81   isFFIDynResultTy,    -- :: Type -> Bool
82   isFFILabelTy,        -- :: Type -> Bool
83   isFFIDotnetTy,       -- :: DynFlags -> Type -> Bool
84   isFFIDotnetObjTy,    -- :: Type -> Bool
85   isFFITy,             -- :: Type -> Bool
86   tcSplitIOType_maybe, -- :: Type -> Maybe Type  
87   toDNType,            -- :: Type -> DNType
88
89   --------------------------------
90   -- Rexported from Type
91   Kind,         -- Stuff to do with kinds is insensitive to pre/post Tc
92   unliftedTypeKind, liftedTypeKind, argTypeKind,
93   openTypeKind, mkArrowKind, mkArrowKinds, 
94   isLiftedTypeKind, isUnliftedTypeKind, isSubOpenTypeKind, 
95   isSubArgTypeKind, isSubKind, defaultKind,
96   kindVarRef, mkKindVar,  
97
98   Type, PredType(..), ThetaType, 
99   mkForAllTy, mkForAllTys, 
100   mkFunTy, mkFunTys, zipFunTys, 
101   mkTyConApp, mkAppTy, mkAppTys, applyTy, applyTys,
102   mkTyVarTy, mkTyVarTys, mkTyConTy, mkPredTy, mkPredTys, 
103
104   -- Type substitutions
105   TvSubst(..),  -- Representation visible to a few friends
106   TvSubstEnv, emptyTvSubst, substEqSpec,
107   mkOpenTvSubst, zipOpenTvSubst, zipTopTvSubst, mkTopTvSubst, notElemTvSubst,
108   getTvSubstEnv, setTvSubstEnv, getTvInScope, extendTvInScope, lookupTyVar,
109   extendTvSubst, extendTvSubstList, isInScope, mkTvSubst, zipTyEnv,
110   substTy, substTys, substTyWith, substTheta, substTyVar, substTyVarBndr,
111
112   isUnLiftedType,       -- Source types are always lifted
113   isUnboxedTupleType,   -- Ditto
114   isPrimitiveType, 
115
116   tidyTopType, tidyType, tidyPred, tidyTypes, tidyFreeTyVars, tidyOpenType, tidyOpenTypes,
117   tidyTyVarBndr, tidyOpenTyVar, tidyOpenTyVars, tidySkolemTyVar,
118   typeKind, tidyKind,
119
120   tyVarsOfType, tyVarsOfTypes, tyVarsOfPred, tyVarsOfTheta,
121   tcTyVarsOfType, tcTyVarsOfTypes, exactTyVarsOfType, exactTyVarsOfTypes,
122
123   pprKind, pprParendKind,
124   pprType, pprParendType, pprTyThingCategory,
125   pprPred, pprTheta, pprThetaArrow, pprClassPred
126
127   ) where
128
129 #include "HsVersions.h"
130
131 -- friends:
132 import TypeRep          ( Type(..), funTyCon, Kind )  -- friend
133
134 import Type             (       -- Re-exports
135                           tyVarsOfType, tyVarsOfTypes, tyVarsOfPred,
136                           tyVarsOfTheta, Kind, PredType(..), KindVar,
137                           ThetaType, isUnliftedTypeKind, unliftedTypeKind, 
138                           argTypeKind,
139                           liftedTypeKind, openTypeKind, mkArrowKind,
140                           tySuperKind, isLiftedTypeKind,
141                           mkArrowKinds, mkForAllTy, mkForAllTys,
142                           defaultKind, isSubArgTypeKind, isSubOpenTypeKind,
143                           mkFunTy, mkFunTys, zipFunTys, 
144                           mkTyConApp, mkAppTy,
145                           mkAppTys, applyTy, applyTys,
146                           mkTyVarTy, mkTyVarTys, mkTyConTy, mkPredTy,
147                           mkPredTys, isUnLiftedType, 
148                           isUnboxedTupleType, isPrimitiveType,
149                           splitTyConApp_maybe,
150                           tidyTopType, tidyType, tidyPred, tidyTypes,
151                           tidyFreeTyVars, tidyOpenType, tidyOpenTypes,
152                           tidyTyVarBndr, tidyOpenTyVar,
153                           tidyOpenTyVars, tidyKind,
154                           isSubKind, tcView,
155
156                           tcEqType, tcEqTypes, tcCmpType, tcCmpTypes, 
157                           tcEqPred, tcCmpPred, tcEqTypeX, eqKind,
158
159                           TvSubst(..),
160                           TvSubstEnv, emptyTvSubst, mkTvSubst, zipTyEnv,
161                           mkOpenTvSubst, zipOpenTvSubst, zipTopTvSubst, mkTopTvSubst,
162                           getTvSubstEnv, setTvSubstEnv, getTvInScope, extendTvInScope,
163                           extendTvSubst, extendTvSubstList, isInScope, notElemTvSubst,
164                           substTy, substTys, substTyWith, substTheta, 
165                           substTyVar, substTyVarBndr, substPred, lookupTyVar,
166
167                           typeKind, repType, coreView, repSplitAppTy_maybe,
168                           pprKind, pprParendKind,
169                           pprType, pprParendType, pprTyThingCategory,
170                           pprPred, pprTheta, pprThetaArrow, pprClassPred
171                         )
172 import TyCon            ( TyCon, isUnLiftedTyCon, isSynTyCon, synTyConDefn, tyConUnique )
173 import DataCon          ( DataCon, dataConStupidTheta, dataConResTys )
174 import Class            ( Class )
175 import Var              ( TyVar, Id, isTcTyVar, mkTcTyVar, tyVarName, tyVarKind, tcTyVarDetails )
176 import ForeignCall      ( Safety, DNType(..) )
177 import Unify            ( tcMatchTys )
178 import VarSet
179
180 -- others:
181 import DynFlags         ( DynFlags, DynFlag( Opt_GlasgowExts ), dopt )
182 import Name             ( Name, NamedThing(..), mkInternalName, getSrcLoc, mkSystemName )
183 import NameSet
184 import VarEnv           ( TidyEnv )
185 import OccName          ( OccName, mkDictOcc, mkOccName, tvName )
186 import PrelNames        -- Lots (e.g. in isFFIArgumentTy)
187 import TysWiredIn       ( unitTyCon, charTyCon, listTyCon )
188 import BasicTypes       ( IPName(..), Arity, ipNameName )
189 import SrcLoc           ( SrcLoc, SrcSpan )
190 import Util             ( equalLength )
191 import Maybes           ( maybeToBool, expectJust, mapCatMaybes )
192 import ListSetOps       ( hasNoDups )
193 import List             ( nubBy )
194 import Outputable
195 import DATA_IOREF
196 \end{code}
197
198
199 %************************************************************************
200 %*                                                                      *
201 \subsection{Types}
202 %*                                                                      *
203 %************************************************************************
204
205 The type checker divides the generic Type world into the 
206 following more structured beasts:
207
208 sigma ::= forall tyvars. phi
209         -- A sigma type is a qualified type
210         --
211         -- Note that even if 'tyvars' is empty, theta
212         -- may not be: e.g.   (?x::Int) => Int
213
214         -- Note that 'sigma' is in prenex form:
215         -- all the foralls are at the front.
216         -- A 'phi' type has no foralls to the right of
217         -- an arrow
218
219 phi :: theta => rho
220
221 rho ::= sigma -> rho
222      |  tau
223
224 -- A 'tau' type has no quantification anywhere
225 -- Note that the args of a type constructor must be taus
226 tau ::= tyvar
227      |  tycon tau_1 .. tau_n
228      |  tau_1 tau_2
229      |  tau_1 -> tau_2
230
231 -- In all cases, a (saturated) type synonym application is legal,
232 -- provided it expands to the required form.
233
234 \begin{code}
235 type TcTyVar = TyVar    -- Used only during type inference
236 type TcType = Type      -- A TcType can have mutable type variables
237         -- Invariant on ForAllTy in TcTypes:
238         --      forall a. T
239         -- a cannot occur inside a MutTyVar in T; that is,
240         -- T is "flattened" before quantifying over a
241
242 -- These types do not have boxy type variables in them
243 type TcPredType     = PredType
244 type TcThetaType    = ThetaType
245 type TcSigmaType    = TcType
246 type TcRhoType      = TcType
247 type TcTauType      = TcType
248 type TcKind         = Kind
249 type TcTyVarSet     = TyVarSet
250
251 -- These types may have boxy type variables in them
252 type BoxyTyVar      = TcTyVar
253 type BoxyRhoType    = TcType    
254 type BoxyThetaType  = TcThetaType       
255 type BoxySigmaType  = TcType            
256 type BoxyType       = TcType            
257 \end{code}
258
259
260 %************************************************************************
261 %*                                                                      *
262 \subsection{TyVarDetails}
263 %*                                                                      *
264 %************************************************************************
265
266 TyVarDetails gives extra info about type variables, used during type
267 checking.  It's attached to mutable type variables only.
268 It's knot-tied back to Var.lhs.  There is no reason in principle
269 why Var.lhs shouldn't actually have the definition, but it "belongs" here.
270
271
272 Note [Signature skolems]
273 ~~~~~~~~~~~~~~~~~~~~~~~~
274 Consider this
275
276   x :: [a]
277   y :: b
278   (x,y,z) = ([y,z], z, head x)
279
280 Here, x and y have type sigs, which go into the environment.  We used to
281 instantiate their types with skolem constants, and push those types into
282 the RHS, so we'd typecheck the RHS with type
283         ( [a*], b*, c )
284 where a*, b* are skolem constants, and c is an ordinary meta type varible.
285
286 The trouble is that the occurrences of z in the RHS force a* and b* to 
287 be the *same*, so we can't make them into skolem constants that don't unify
288 with each other.  Alas.
289
290 One solution would be insist that in the above defn the programmer uses
291 the same type variable in both type signatures.  But that takes explanation.
292
293 The alternative (currently implemented) is to have a special kind of skolem
294 constant, SigTv, which can unify with other SigTvs.  These are *not* treated
295 as righd for the purposes of GADTs.  And they are used *only* for pattern 
296 bindings and mutually recursive function bindings.  See the function
297 TcBinds.tcInstSig, and its use_skols parameter.
298
299
300 \begin{code}
301 -- A TyVarDetails is inside a TyVar
302 data TcTyVarDetails
303   = SkolemTv SkolemInfo                 -- A skolem constant
304
305   | MetaTv BoxInfo (IORef MetaDetails)
306
307 data BoxInfo 
308    = BoxTv      -- The contents is a (non-boxy) sigma-type
309                 -- That is, this MetaTv is a "box"
310
311    | TauTv      -- The contents is a (non-boxy) tau-type
312                 -- That is, this MetaTv is an ordinary unification variable
313
314    | SigTv SkolemInfo   -- A variant of TauTv, except that it should not be
315                         -- unified with a type, only with a type variable
316                         -- SigTvs are only distinguished to improve error messages
317                         --      see Note [Signature skolems]        
318                         --      The MetaDetails, if filled in, will 
319                         --      always be another SigTv or a SkolemTv
320
321 -- INVARIANTS:
322 --      A TauTv is always filled in with a tau-type, which
323 --      never contains any BoxTvs, nor any ForAlls 
324 --
325 --      However, a BoxTv can contain a type that contains further BoxTvs
326 --      Notably, when typechecking an explicit list, say [e1,e2], with
327 --      expected type being a box b1, we fill in b1 with (List b2), where
328 --      b2 is another (currently empty) box.
329
330 data MetaDetails
331   = Flexi          -- Flexi type variables unify to become 
332                    -- Indirects.  
333
334   | Indirect TcType  -- INVARIANT:
335                      --   For a BoxTv, this type must be non-boxy
336                      --   For a TauTv, this type must be a tau-type
337
338 data SkolemInfo
339   = SigSkol UserTypeCtxt        -- A skolem that is created by instantiating
340                                 -- a programmer-supplied type signature
341                                 -- Location of the binding site is on the TyVar
342
343         -- The rest are for non-scoped skolems
344   | ClsSkol Class       -- Bound at a class decl
345   | InstSkol Id         -- Bound at an instance decl
346   | PatSkol DataCon     -- An existential type variable bound by a pattern for
347             SrcSpan     -- a data constructor with an existential type. E.g.
348                         --      data T = forall a. Eq a => MkT a
349                         --      f (MkT x) = ...
350                         -- The pattern MkT x will allocate an existential type
351                         -- variable for 'a'.  
352   | ArrowSkol SrcSpan   -- An arrow form (see TcArrows)
353
354   | GenSkol [TcTyVar]   -- Bound when doing a subsumption check for 
355             TcType      --      (forall tvs. ty)
356             SrcSpan
357
358   | UnkSkol             -- Unhelpful info (until I improve it)
359
360 -------------------------------------
361 -- UserTypeCtxt describes the places where a 
362 -- programmer-written type signature can occur
363 data UserTypeCtxt 
364   = FunSigCtxt Name     -- Function type signature
365                         -- Also used for types in SPECIALISE pragmas
366   | ExprSigCtxt         -- Expression type signature
367   | ConArgCtxt Name     -- Data constructor argument
368   | TySynCtxt Name      -- RHS of a type synonym decl
369   | GenPatCtxt          -- Pattern in generic decl
370                         --      f{| a+b |} (Inl x) = ...
371   | LamPatSigCtxt               -- Type sig in lambda pattern
372                         --      f (x::t) = ...
373   | BindPatSigCtxt      -- Type sig in pattern binding pattern
374                         --      (x::t, y) = e
375   | ResSigCtxt          -- Result type sig
376                         --      f x :: t = ....
377   | ForSigCtxt Name     -- Foreign inport or export signature
378   | RuleSigCtxt Name    -- Signature on a forall'd variable in a RULE
379   | DefaultDeclCtxt     -- Types in a default declaration
380   | SpecInstCtxt        -- SPECIALISE instance pragma
381
382 -- Notes re TySynCtxt
383 -- We allow type synonyms that aren't types; e.g.  type List = []
384 --
385 -- If the RHS mentions tyvars that aren't in scope, we'll 
386 -- quantify over them:
387 --      e.g.    type T = a->a
388 -- will become  type T = forall a. a->a
389 --
390 -- With gla-exts that's right, but for H98 we should complain. 
391
392 ---------------------------------
393 -- Kind variables:
394
395 mkKindName :: Unique -> Name
396 mkKindName unique = mkSystemName unique kind_var_occ
397
398 kindVarRef :: KindVar -> IORef MetaDetails
399 kindVarRef tc = 
400   case tcTyVarDetails tc of
401     MetaTv TauTv ref -> ref
402     other            -> pprPanic "kindVarRef" (ppr tc)
403
404 mkKindVar :: Unique -> IORef MetaDetails -> KindVar
405 mkKindVar u r 
406   = mkTcTyVar (mkKindName u)
407               tySuperKind  -- not sure this is right,
408                             -- do we need kind vars for
409                             -- coercions?
410               (MetaTv TauTv r)
411
412 kind_var_occ :: OccName -- Just one for all KindVars
413                         -- They may be jiggled by tidying
414 kind_var_occ = mkOccName tvName "k"
415 \end{code}
416 \end{code}
417
418 %************************************************************************
419 %*                                                                      *
420                 Pretty-printing
421 %*                                                                      *
422 %************************************************************************
423
424 \begin{code}
425 pprTcTyVarDetails :: TcTyVarDetails -> SDoc
426 -- For debugging
427 pprTcTyVarDetails (SkolemTv _)         = ptext SLIT("sk")
428 pprTcTyVarDetails (MetaTv BoxTv _)     = ptext SLIT("box")
429 pprTcTyVarDetails (MetaTv TauTv _)     = ptext SLIT("tau")
430 pprTcTyVarDetails (MetaTv (SigTv _) _) = ptext SLIT("sig")
431
432 pprUserTypeCtxt :: UserTypeCtxt -> SDoc
433 pprUserTypeCtxt (FunSigCtxt n)  = ptext SLIT("the type signature for") <+> quotes (ppr n)
434 pprUserTypeCtxt ExprSigCtxt     = ptext SLIT("an expression type signature")
435 pprUserTypeCtxt (ConArgCtxt c)  = ptext SLIT("the type of the constructor") <+> quotes (ppr c)
436 pprUserTypeCtxt (TySynCtxt c)   = ptext SLIT("the RHS of the type synonym") <+> quotes (ppr c)
437 pprUserTypeCtxt GenPatCtxt      = ptext SLIT("the type pattern of a generic definition")
438 pprUserTypeCtxt LamPatSigCtxt   = ptext SLIT("a pattern type signature")
439 pprUserTypeCtxt BindPatSigCtxt  = ptext SLIT("a pattern type signature")
440 pprUserTypeCtxt ResSigCtxt      = ptext SLIT("a result type signature")
441 pprUserTypeCtxt (ForSigCtxt n)  = ptext SLIT("the foreign declaration for") <+> quotes (ppr n)
442 pprUserTypeCtxt (RuleSigCtxt n) = ptext SLIT("the type signature for") <+> quotes (ppr n)
443 pprUserTypeCtxt DefaultDeclCtxt = ptext SLIT("a type in a `default' declaration")
444 pprUserTypeCtxt SpecInstCtxt    = ptext SLIT("a SPECIALISE instance pragma")
445
446
447 --------------------------------
448 tidySkolemTyVar :: TidyEnv -> TcTyVar -> (TidyEnv, TcTyVar)
449 -- Tidy the type inside a GenSkol, preparatory to printing it
450 tidySkolemTyVar env tv
451   = ASSERT( isSkolemTyVar tv || isSigTyVar tv )
452     (env1, mkTcTyVar (tyVarName tv) (tyVarKind tv) info1)
453   where
454     (env1, info1) = case tcTyVarDetails tv of
455                         SkolemTv info -> (env1, SkolemTv info')
456                                 where
457                                   (env1, info') = tidy_skol_info env info
458                         MetaTv (SigTv info) box -> (env1, MetaTv (SigTv info') box)
459                                 where
460                                   (env1, info') = tidy_skol_info env info
461                         info -> (env, info)
462
463     tidy_skol_info env (GenSkol tvs ty loc) = (env2, GenSkol tvs1 ty1 loc)
464                             where
465                               (env1, tvs1) = tidyOpenTyVars env tvs
466                               (env2, ty1)  = tidyOpenType env1 ty
467     tidy_skol_info env info = (env, info)
468                      
469 pprSkolTvBinding :: TcTyVar -> SDoc
470 -- Print info about the binding of a skolem tyvar, 
471 -- or nothing if we don't have anything useful to say
472 pprSkolTvBinding tv
473   = ppr_details (tcTyVarDetails tv)
474   where
475     ppr_details (MetaTv TauTv _)   = quotes (ppr tv) <+> ptext SLIT("is a meta type variable")
476     ppr_details (MetaTv BoxTv _)   = quotes (ppr tv) <+> ptext SLIT("is a boxy type variable")
477     ppr_details (MetaTv (SigTv info) _) = ppr_skol info
478     ppr_details (SkolemTv info)         = ppr_skol info
479
480     ppr_skol UnkSkol         = empty    -- Unhelpful; omit
481     ppr_skol (SigSkol ctxt)  = sep [quotes (ppr tv) <+> ptext SLIT("is bound by") <+> pprUserTypeCtxt ctxt,
482                                     nest 2 (ptext SLIT("at") <+> ppr (getSrcLoc tv))]
483     ppr_skol info            = quotes (ppr tv) <+> pprSkolInfo info
484  
485 pprSkolInfo :: SkolemInfo -> SDoc
486 pprSkolInfo (SigSkol ctxt)   = ptext SLIT("is bound by") <+> pprUserTypeCtxt ctxt
487 pprSkolInfo (ClsSkol cls)    = ptext SLIT("is bound by the class declaration for") <+> quotes (ppr cls)
488 pprSkolInfo (InstSkol df)    = ptext SLIT("is bound by the instance declaration at") <+> ppr (getSrcLoc df)
489 pprSkolInfo (ArrowSkol loc)  = ptext SLIT("is bound by the arrow form at") <+> ppr loc
490 pprSkolInfo (PatSkol dc loc) = sep [ptext SLIT("is bound by the pattern for") <+> quotes (ppr dc),
491                                     nest 2 (ptext SLIT("at") <+> ppr loc)]
492 pprSkolInfo (GenSkol tvs ty loc) = sep [sep [ptext SLIT("is bound by the polymorphic type"), 
493                                              nest 2 (quotes (ppr (mkForAllTys tvs ty)))],
494                                         nest 2 (ptext SLIT("at") <+> ppr loc)]
495 -- UnkSkol, SigSkol
496 -- For type variables the others are dealt with by pprSkolTvBinding.  
497 -- For Insts, these cases should not happen
498 pprSkolInfo UnkSkol = panic "UnkSkol"
499
500 instance Outputable MetaDetails where
501   ppr Flexi         = ptext SLIT("Flexi")
502   ppr (Indirect ty) = ptext SLIT("Indirect") <+> ppr ty
503 \end{code}
504
505
506 %************************************************************************
507 %*                                                                      *
508                 Predicates
509 %*                                                                      *
510 %************************************************************************
511
512 \begin{code}
513 isImmutableTyVar, isSkolemTyVar, isExistentialTyVar, isBoxyTyVar, isMetaTyVar :: TyVar -> Bool
514 isImmutableTyVar tv
515   | isTcTyVar tv = isSkolemTyVar tv
516   | otherwise    = True
517
518 isSkolemTyVar tv 
519   = ASSERT( isTcTyVar tv )
520     case tcTyVarDetails tv of
521         SkolemTv _         -> True
522         MetaTv _ _         -> False
523
524 isExistentialTyVar tv   -- Existential type variable, bound by a pattern
525   = ASSERT( isTcTyVar tv )
526     case tcTyVarDetails tv of
527         SkolemTv (PatSkol _ _) -> True
528         other                  -> False
529
530 isMetaTyVar tv 
531   = ASSERT2( isTcTyVar tv, ppr tv )
532     case tcTyVarDetails tv of
533         MetaTv _ _ -> True
534         other      -> False
535
536 isBoxyTyVar tv 
537   = ASSERT( isTcTyVar tv )
538     case tcTyVarDetails tv of
539         MetaTv BoxTv _ -> True
540         other          -> False
541
542 isSigTyVar tv 
543   = ASSERT( isTcTyVar tv )
544     case tcTyVarDetails tv of
545         MetaTv (SigTv _) _ -> True
546         other              -> False
547
548 metaTvRef :: TyVar -> IORef MetaDetails
549 metaTvRef tv 
550   = ASSERT( isTcTyVar tv )
551     case tcTyVarDetails tv of
552         MetaTv _ ref -> ref
553         other      -> pprPanic "metaTvRef" (ppr tv)
554
555 isFlexi, isIndirect :: MetaDetails -> Bool
556 isFlexi Flexi = True
557 isFlexi other = False
558
559 isIndirect (Indirect _) = True
560 isIndirect other        = False
561 \end{code}
562
563
564 %************************************************************************
565 %*                                                                      *
566 \subsection{Tau, sigma and rho}
567 %*                                                                      *
568 %************************************************************************
569
570 \begin{code}
571 mkSigmaTy :: [TyVar] -> [PredType] -> Type -> Type
572 mkSigmaTy tyvars theta tau = mkForAllTys tyvars (mkPhiTy theta tau)
573
574 mkPhiTy :: [PredType] -> Type -> Type
575 mkPhiTy theta ty = foldr (\p r -> FunTy (mkPredTy p) r) ty theta
576 \end{code}
577
578 @isTauTy@ tests for nested for-alls.  It should not be called on a boxy type.
579
580 \begin{code}
581 isTauTy :: Type -> Bool
582 isTauTy ty | Just ty' <- tcView ty = isTauTy ty'
583 isTauTy (TyVarTy tv)     = ASSERT( not (isTcTyVar tv && isBoxyTyVar tv) )
584                            True
585 isTauTy (TyConApp tc tys) = all isTauTy tys && isTauTyCon tc
586 isTauTy (AppTy a b)       = isTauTy a && isTauTy b
587 isTauTy (FunTy a b)       = isTauTy a && isTauTy b
588 isTauTy (PredTy p)        = True                -- Don't look through source types
589 isTauTy other             = False
590
591
592 isTauTyCon :: TyCon -> Bool
593 -- Returns False for type synonyms whose expansion is a polytype
594 isTauTyCon tc | isSynTyCon tc = isTauTy (snd (synTyConDefn tc))
595               | otherwise     = True
596
597 ---------------
598 isBoxyTy :: TcType -> Bool
599 isBoxyTy ty = any isBoxyTyVar (varSetElems (tcTyVarsOfType ty))
600
601 isRigidTy :: TcType -> Bool
602 -- A type is rigid if it has no meta type variables in it
603 isRigidTy ty = all isSkolemTyVar (varSetElems (tcTyVarsOfType ty))
604
605 isRefineableTy :: TcType -> Bool
606 -- A type should have type refinements applied to it if it has
607 -- free type variables, and they are all rigid
608 isRefineableTy ty = not (null tc_tvs) && all isSkolemTyVar tc_tvs
609                     where
610                       tc_tvs = varSetElems (tcTyVarsOfType ty)
611
612 ---------------
613 getDFunTyKey :: Type -> OccName -- Get some string from a type, to be used to 
614                                 -- construct a dictionary function name
615 getDFunTyKey ty | Just ty' <- tcView ty = getDFunTyKey ty'
616 getDFunTyKey (TyVarTy tv)    = getOccName tv
617 getDFunTyKey (TyConApp tc _) = getOccName tc
618 getDFunTyKey (AppTy fun _)   = getDFunTyKey fun
619 getDFunTyKey (FunTy arg _)   = getOccName funTyCon
620 getDFunTyKey (ForAllTy _ t)  = getDFunTyKey t
621 getDFunTyKey ty              = pprPanic "getDFunTyKey" (pprType ty)
622 -- PredTy shouldn't happen
623 \end{code}
624
625
626 %************************************************************************
627 %*                                                                      *
628 \subsection{Expanding and splitting}
629 %*                                                                      *
630 %************************************************************************
631
632 These tcSplit functions are like their non-Tc analogues, but
633         a) they do not look through newtypes
634         b) they do not look through PredTys
635         c) [future] they ignore usage-type annotations
636
637 However, they are non-monadic and do not follow through mutable type
638 variables.  It's up to you to make sure this doesn't matter.
639
640 \begin{code}
641 tcSplitForAllTys :: Type -> ([TyVar], Type)
642 tcSplitForAllTys ty = split ty ty []
643    where
644      split orig_ty ty tvs | Just ty' <- tcView ty = split orig_ty ty' tvs
645      split orig_ty (ForAllTy tv ty) tvs = split ty ty (tv:tvs)
646      split orig_ty t                tvs = (reverse tvs, orig_ty)
647
648 tcIsForAllTy ty | Just ty' <- tcView ty = tcIsForAllTy ty'
649 tcIsForAllTy (ForAllTy tv ty) = True
650 tcIsForAllTy t                = False
651
652 tcSplitPhiTy :: Type -> (ThetaType, Type)
653 tcSplitPhiTy ty = split ty ty []
654  where
655   split orig_ty ty tvs | Just ty' <- tcView ty = split orig_ty ty' tvs
656   split orig_ty (FunTy arg res) ts 
657         | Just p <- tcSplitPredTy_maybe arg = split res res (p:ts)
658   split orig_ty ty              ts = (reverse ts, orig_ty)
659
660 tcSplitSigmaTy :: Type -> ([TyVar], ThetaType, Type)
661 tcSplitSigmaTy ty = case tcSplitForAllTys ty of
662                         (tvs, rho) -> case tcSplitPhiTy rho of
663                                         (theta, tau) -> (tvs, theta, tau)
664
665 -----------------------
666 tcMultiSplitSigmaTy
667         :: TcSigmaType
668         -> ( [([TyVar], ThetaType)],    -- forall as.C => forall bs.D
669              TcSigmaType)               -- The rest of the type
670
671 -- We need a loop here because we are now prepared to entertain
672 -- types like
673 --      f:: forall a. Eq a => forall b. Baz b => tau
674 -- We want to instantiate this to
675 --      f2::tau         {f2 = f1 b (Baz b), f1 = f a (Eq a)}
676
677 tcMultiSplitSigmaTy sigma
678   = case (tcSplitSigmaTy sigma) of
679         ([],[],ty) -> ([], sigma)
680         (tvs, theta, ty) -> case tcMultiSplitSigmaTy ty of
681                                 (pairs, rest) -> ((tvs,theta):pairs, rest)
682
683 -----------------------
684 tcTyConAppTyCon :: Type -> TyCon
685 tcTyConAppTyCon ty = fst (tcSplitTyConApp ty)
686
687 tcTyConAppArgs :: Type -> [Type]
688 tcTyConAppArgs ty = snd (tcSplitTyConApp ty)
689
690 tcSplitTyConApp :: Type -> (TyCon, [Type])
691 tcSplitTyConApp ty = case tcSplitTyConApp_maybe ty of
692                         Just stuff -> stuff
693                         Nothing    -> pprPanic "tcSplitTyConApp" (pprType ty)
694
695 tcSplitTyConApp_maybe :: Type -> Maybe (TyCon, [Type])
696 tcSplitTyConApp_maybe ty | Just ty' <- tcView ty = tcSplitTyConApp_maybe ty'
697 tcSplitTyConApp_maybe (TyConApp tc tys) = Just (tc, tys)
698 tcSplitTyConApp_maybe (FunTy arg res)   = Just (funTyCon, [arg,res])
699         -- Newtypes are opaque, so they may be split
700         -- However, predicates are not treated
701         -- as tycon applications by the type checker
702 tcSplitTyConApp_maybe other             = Nothing
703
704 -----------------------
705 tcSplitFunTys :: Type -> ([Type], Type)
706 tcSplitFunTys ty = case tcSplitFunTy_maybe ty of
707                         Nothing        -> ([], ty)
708                         Just (arg,res) -> (arg:args, res')
709                                        where
710                                           (args,res') = tcSplitFunTys res
711
712 tcSplitFunTy_maybe :: Type -> Maybe (Type, Type)
713 tcSplitFunTy_maybe ty | Just ty' <- tcView ty = tcSplitFunTy_maybe ty'
714 tcSplitFunTy_maybe (FunTy arg res)  = Just (arg, res)
715 tcSplitFunTy_maybe other            = Nothing
716
717 tcSplitFunTysN
718         :: TcRhoType 
719         -> Arity                -- N: Number of desired args
720         -> ([TcSigmaType],      -- Arg types (N or fewer)
721             TcSigmaType)        -- The rest of the type
722
723 tcSplitFunTysN ty n_args
724   | n_args == 0
725   = ([], ty)
726   | Just (arg,res) <- tcSplitFunTy_maybe ty
727   = case tcSplitFunTysN res (n_args - 1) of
728         (args, res) -> (arg:args, res)
729   | otherwise
730   = ([], ty)
731
732 tcSplitFunTy  ty = expectJust "tcSplitFunTy" (tcSplitFunTy_maybe ty)
733 tcFunArgTy    ty = fst (tcSplitFunTy ty)
734 tcFunResultTy ty = snd (tcSplitFunTy ty)
735
736 -----------------------
737 tcSplitAppTy_maybe :: Type -> Maybe (Type, Type)
738 tcSplitAppTy_maybe ty | Just ty' <- tcView ty = tcSplitAppTy_maybe ty'
739 tcSplitAppTy_maybe ty = repSplitAppTy_maybe ty
740
741 tcSplitAppTy :: Type -> (Type, Type)
742 tcSplitAppTy ty = case tcSplitAppTy_maybe ty of
743                     Just stuff -> stuff
744                     Nothing    -> pprPanic "tcSplitAppTy" (pprType ty)
745
746 tcSplitAppTys :: Type -> (Type, [Type])
747 tcSplitAppTys ty
748   = go ty []
749   where
750     go ty args = case tcSplitAppTy_maybe ty of
751                    Just (ty', arg) -> go ty' (arg:args)
752                    Nothing         -> (ty,args)
753
754 -----------------------
755 tcGetTyVar_maybe :: Type -> Maybe TyVar
756 tcGetTyVar_maybe ty | Just ty' <- tcView ty = tcGetTyVar_maybe ty'
757 tcGetTyVar_maybe (TyVarTy tv)   = Just tv
758 tcGetTyVar_maybe other          = Nothing
759
760 tcGetTyVar :: String -> Type -> TyVar
761 tcGetTyVar msg ty = expectJust msg (tcGetTyVar_maybe ty)
762
763 tcIsTyVarTy :: Type -> Bool
764 tcIsTyVarTy ty = maybeToBool (tcGetTyVar_maybe ty)
765
766 -----------------------
767 tcSplitDFunTy :: Type -> ([TyVar], [PredType], Class, [Type])
768 -- Split the type of a dictionary function
769 tcSplitDFunTy ty 
770   = case tcSplitSigmaTy ty   of { (tvs, theta, tau) ->
771     case tcSplitDFunHead tau of { (clas, tys) -> 
772     (tvs, theta, clas, tys) }}
773
774 tcSplitDFunHead :: Type -> (Class, [Type])
775 tcSplitDFunHead tau  
776   = case tcSplitPredTy_maybe tau of 
777         Just (ClassP clas tys) -> (clas, tys)
778         other -> panic "tcSplitDFunHead"
779
780 tcValidInstHeadTy :: Type -> Bool
781 -- Used in Haskell-98 mode, for the argument types of an instance head
782 -- These must not be type synonyms, but everywhere else type synonyms
783 -- are transparent, so we need a special function here
784 tcValidInstHeadTy ty
785   = case ty of
786         NoteTy _ ty     -> tcValidInstHeadTy ty
787         TyConApp tc tys -> not (isSynTyCon tc) && ok tys
788         FunTy arg res   -> ok [arg, res]
789         other           -> False
790   where
791         -- Check that all the types are type variables,
792         -- and that each is distinct
793     ok tys = equalLength tvs tys && hasNoDups tvs
794            where
795              tvs = mapCatMaybes get_tv tys
796
797     get_tv (NoteTy _ ty) = get_tv ty    -- Again, do not look
798     get_tv (TyVarTy tv)  = Just tv      -- through synonyms
799     get_tv other         = Nothing
800 \end{code}
801
802
803
804 %************************************************************************
805 %*                                                                      *
806 \subsection{Predicate types}
807 %*                                                                      *
808 %************************************************************************
809
810 \begin{code}
811 tcSplitPredTy_maybe :: Type -> Maybe PredType
812    -- Returns Just for predicates only
813 tcSplitPredTy_maybe ty | Just ty' <- tcView ty = tcSplitPredTy_maybe ty'
814 tcSplitPredTy_maybe (PredTy p)    = Just p
815 tcSplitPredTy_maybe other         = Nothing
816         
817 predTyUnique :: PredType -> Unique
818 predTyUnique (IParam n _)      = getUnique (ipNameName n)
819 predTyUnique (ClassP clas tys) = getUnique clas
820
821 mkPredName :: Unique -> SrcLoc -> PredType -> Name
822 mkPredName uniq loc (ClassP cls tys) = mkInternalName uniq (mkDictOcc (getOccName cls)) loc
823 mkPredName uniq loc (IParam ip ty)   = mkInternalName uniq (getOccName (ipNameName ip)) loc
824 \end{code}
825
826
827 --------------------- Dictionary types ---------------------------------
828
829 \begin{code}
830 mkClassPred clas tys = ClassP clas tys
831
832 isClassPred :: PredType -> Bool
833 isClassPred (ClassP clas tys) = True
834 isClassPred other             = False
835
836 isTyVarClassPred (ClassP clas tys) = all tcIsTyVarTy tys
837 isTyVarClassPred other             = False
838
839 getClassPredTys_maybe :: PredType -> Maybe (Class, [Type])
840 getClassPredTys_maybe (ClassP clas tys) = Just (clas, tys)
841 getClassPredTys_maybe _                 = Nothing
842
843 getClassPredTys :: PredType -> (Class, [Type])
844 getClassPredTys (ClassP clas tys) = (clas, tys)
845 getClassPredTys other = panic "getClassPredTys"
846
847 isEqPred :: PredType -> Bool
848 isEqPred (EqPred {}) = True
849 isEqPred _           = False
850
851 mkDictTy :: Class -> [Type] -> Type
852 mkDictTy clas tys = mkPredTy (ClassP clas tys)
853
854 isDictTy :: Type -> Bool
855 isDictTy ty | Just ty' <- tcView ty = isDictTy ty'
856 isDictTy (PredTy p) = isClassPred p
857 isDictTy other      = False
858 \end{code}
859
860 --------------------- Implicit parameters ---------------------------------
861
862 \begin{code}
863 isIPPred :: PredType -> Bool
864 isIPPred (IParam _ _) = True
865 isIPPred other        = False
866
867 isInheritablePred :: PredType -> Bool
868 -- Can be inherited by a context.  For example, consider
869 --      f x = let g y = (?v, y+x)
870 --            in (g 3 with ?v = 8, 
871 --                g 4 with ?v = 9)
872 -- The point is that g's type must be quantifed over ?v:
873 --      g :: (?v :: a) => a -> a
874 -- but it doesn't need to be quantified over the Num a dictionary
875 -- which can be free in g's rhs, and shared by both calls to g
876 isInheritablePred (ClassP _ _) = True
877 isInheritablePred other      = False
878
879 isLinearPred :: TcPredType -> Bool
880 isLinearPred (IParam (Linear n) _) = True
881 isLinearPred other                 = False
882 \end{code}
883
884 --------------------- Equality predicates ---------------------------------
885 \begin{code}
886 substEqSpec :: TvSubst -> [(TyVar,Type)] -> [(TcType,TcType)]
887 substEqSpec subst eq_spec = [ (substTyVar subst tv, substTy subst ty)
888                             | (tv,ty) <- eq_spec]
889 \end{code}
890
891 --------------------- The stupid theta (sigh) ---------------------------------
892
893 \begin{code}
894 dataConsStupidTheta :: [DataCon] -> ThetaType
895 -- Union the stupid thetas from all the specified constructors (non-empty)
896 -- All the constructors should have the same result type, modulo alpha conversion
897 -- The resulting ThetaType uses type variables from the *first* constructor in the list
898 --
899 -- It's here because it's used in MkId.mkRecordSelId, and in TcExpr
900 dataConsStupidTheta (con1:cons)
901   = nubBy tcEqPred all_preds
902   where
903     all_preds     = dataConStupidTheta con1 ++ other_stupids
904     res_tys1      = dataConResTys con1
905     tvs1          = tyVarsOfTypes res_tys1
906     other_stupids = [ substPred subst pred
907                     | con <- cons
908                     , let Just subst = tcMatchTys tvs1 res_tys1 (dataConResTys con)
909                     , pred <- dataConStupidTheta con ]
910 dataConsStupidTheta [] = panic "dataConsStupidTheta"
911 \end{code}
912
913
914 %************************************************************************
915 %*                                                                      *
916 \subsection{Predicates}
917 %*                                                                      *
918 %************************************************************************
919
920 isSigmaTy returns true of any qualified type.  It doesn't *necessarily* have 
921 any foralls.  E.g.
922         f :: (?x::Int) => Int -> Int
923
924 \begin{code}
925 isSigmaTy :: Type -> Bool
926 isSigmaTy ty | Just ty' <- tcView ty = isSigmaTy ty'
927 isSigmaTy (ForAllTy tyvar ty) = True
928 isSigmaTy (FunTy a b)         = isPredTy a
929 isSigmaTy _                   = False
930
931 isOverloadedTy :: Type -> Bool
932 isOverloadedTy ty | Just ty' <- tcView ty = isOverloadedTy ty'
933 isOverloadedTy (ForAllTy tyvar ty) = isOverloadedTy ty
934 isOverloadedTy (FunTy a b)         = isPredTy a
935 isOverloadedTy _                   = False
936
937 isPredTy :: Type -> Bool        -- Belongs in TcType because it does 
938                                 -- not look through newtypes, or predtypes (of course)
939 isPredTy ty | Just ty' <- tcView ty = isPredTy ty'
940 isPredTy (PredTy sty)  = True
941 isPredTy _             = False
942 \end{code}
943
944 \begin{code}
945 isFloatTy      = is_tc floatTyConKey
946 isDoubleTy     = is_tc doubleTyConKey
947 isIntegerTy    = is_tc integerTyConKey
948 isIntTy        = is_tc intTyConKey
949 isBoolTy       = is_tc boolTyConKey
950 isUnitTy       = is_tc unitTyConKey
951
952 is_tc :: Unique -> Type -> Bool
953 -- Newtypes are opaque to this
954 is_tc uniq ty = case tcSplitTyConApp_maybe ty of
955                         Just (tc, _) -> uniq == getUnique tc
956                         Nothing      -> False
957 \end{code}
958
959
960 %************************************************************************
961 %*                                                                      *
962 \subsection{Misc}
963 %*                                                                      *
964 %************************************************************************
965
966 \begin{code}
967 deNoteType :: Type -> Type
968 -- Remove all *outermost* type synonyms and other notes
969 deNoteType ty | Just ty' <- tcView ty = deNoteType ty'
970 deNoteType ty = ty
971 \end{code}
972
973 \begin{code}
974 tcTyVarsOfType :: Type -> TcTyVarSet
975 -- Just the *TcTyVars* free in the type
976 -- (Types.tyVarsOfTypes finds all free TyVars)
977 tcTyVarsOfType (TyVarTy tv)         = if isTcTyVar tv then unitVarSet tv
978                                                       else emptyVarSet
979 tcTyVarsOfType (TyConApp tycon tys) = tcTyVarsOfTypes tys
980 tcTyVarsOfType (NoteTy _ ty)        = tcTyVarsOfType ty
981 tcTyVarsOfType (PredTy sty)         = tcTyVarsOfPred sty
982 tcTyVarsOfType (FunTy arg res)      = tcTyVarsOfType arg `unionVarSet` tcTyVarsOfType res
983 tcTyVarsOfType (AppTy fun arg)      = tcTyVarsOfType fun `unionVarSet` tcTyVarsOfType arg
984 tcTyVarsOfType (ForAllTy tyvar ty)  = tcTyVarsOfType ty `delVarSet` tyvar
985         -- We do sometimes quantify over skolem TcTyVars
986
987 tcTyVarsOfTypes :: [Type] -> TyVarSet
988 tcTyVarsOfTypes tys = foldr (unionVarSet.tcTyVarsOfType) emptyVarSet tys
989
990 tcTyVarsOfPred :: PredType -> TyVarSet
991 tcTyVarsOfPred (IParam _ ty)    = tcTyVarsOfType ty
992 tcTyVarsOfPred (ClassP _ tys)   = tcTyVarsOfTypes tys
993 tcTyVarsOfPred (EqPred ty1 ty2) = tcTyVarsOfType ty1 `unionVarSet` tcTyVarsOfType ty2
994 \end{code}
995
996 Note [Silly type synonym]
997 ~~~~~~~~~~~~~~~~~~~~~~~~~
998 Consider
999         type T a = Int
1000 What are the free tyvars of (T x)?  Empty, of course!  
1001 Here's the example that Ralf Laemmel showed me:
1002         foo :: (forall a. C u a -> C u a) -> u
1003         mappend :: Monoid u => u -> u -> u
1004
1005         bar :: Monoid u => u
1006         bar = foo (\t -> t `mappend` t)
1007 We have to generalise at the arg to f, and we don't
1008 want to capture the constraint (Monad (C u a)) because
1009 it appears to mention a.  Pretty silly, but it was useful to him.
1010
1011 exactTyVarsOfType is used by the type checker to figure out exactly
1012 which type variables are mentioned in a type.  It's also used in the
1013 smart-app checking code --- see TcExpr.tcIdApp
1014
1015 \begin{code}
1016 exactTyVarsOfType :: TcType -> TyVarSet
1017 -- Find the free type variables (of any kind)
1018 -- but *expand* type synonyms.  See Note [Silly type synonym] above.
1019 exactTyVarsOfType ty
1020   = go ty
1021   where
1022     go ty | Just ty' <- tcView ty = go ty'      -- This is the key line
1023     go (TyVarTy tv)               = unitVarSet tv
1024     go (TyConApp tycon tys)       = exactTyVarsOfTypes tys
1025     go (PredTy ty)                = go_pred ty
1026     go (FunTy arg res)            = go arg `unionVarSet` go res
1027     go (AppTy fun arg)            = go fun `unionVarSet` go arg
1028     go (ForAllTy tyvar ty)        = delVarSet (go ty) tyvar
1029
1030     go_pred (IParam _ ty)    = go ty
1031     go_pred (ClassP _ tys)   = exactTyVarsOfTypes tys
1032     go_pred (EqPred ty1 ty2) = go ty1 `unionVarSet` go ty2
1033
1034 exactTyVarsOfTypes :: [TcType] -> TyVarSet
1035 exactTyVarsOfTypes tys = foldr (unionVarSet . exactTyVarsOfType) emptyVarSet tys
1036 \end{code}
1037
1038 Find the free tycons and classes of a type.  This is used in the front
1039 end of the compiler.
1040
1041 \begin{code}
1042 tyClsNamesOfType :: Type -> NameSet
1043 tyClsNamesOfType (TyVarTy tv)               = emptyNameSet
1044 tyClsNamesOfType (TyConApp tycon tys)       = unitNameSet (getName tycon) `unionNameSets` tyClsNamesOfTypes tys
1045 tyClsNamesOfType (NoteTy _ ty2)             = tyClsNamesOfType ty2
1046 tyClsNamesOfType (PredTy (IParam n ty))     = tyClsNamesOfType ty
1047 tyClsNamesOfType (PredTy (ClassP cl tys))   = unitNameSet (getName cl) `unionNameSets` tyClsNamesOfTypes tys
1048 tyClsNamesOfType (PredTy (EqPred ty1 ty2))  = tyClsNamesOfType ty1 `unionNameSets` tyClsNamesOfType ty2
1049 tyClsNamesOfType (FunTy arg res)            = tyClsNamesOfType arg `unionNameSets` tyClsNamesOfType res
1050 tyClsNamesOfType (AppTy fun arg)            = tyClsNamesOfType fun `unionNameSets` tyClsNamesOfType arg
1051 tyClsNamesOfType (ForAllTy tyvar ty)        = tyClsNamesOfType ty
1052
1053 tyClsNamesOfTypes tys = foldr (unionNameSets . tyClsNamesOfType) emptyNameSet tys
1054
1055 tyClsNamesOfDFunHead :: Type -> NameSet
1056 -- Find the free type constructors and classes 
1057 -- of the head of the dfun instance type
1058 -- The 'dfun_head_type' is because of
1059 --      instance Foo a => Baz T where ...
1060 -- The decl is an orphan if Baz and T are both not locally defined,
1061 --      even if Foo *is* locally defined
1062 tyClsNamesOfDFunHead dfun_ty 
1063   = case tcSplitSigmaTy dfun_ty of
1064         (tvs,_,head_ty) -> tyClsNamesOfType head_ty
1065
1066 classesOfTheta :: ThetaType -> [Class]
1067 -- Looks just for ClassP things; maybe it should check
1068 classesOfTheta preds = [ c | ClassP c _ <- preds ]
1069 \end{code}
1070
1071
1072 %************************************************************************
1073 %*                                                                      *
1074 \subsection[TysWiredIn-ext-type]{External types}
1075 %*                                                                      *
1076 %************************************************************************
1077
1078 The compiler's foreign function interface supports the passing of a
1079 restricted set of types as arguments and results (the restricting factor
1080 being the )
1081
1082 \begin{code}
1083 tcSplitIOType_maybe :: Type -> Maybe (TyCon, Type)
1084 -- (isIOType t) returns (Just (IO,t')) if t is of the form (IO t'), or
1085 --                                     some newtype wrapping thereof
1086 --              returns Nothing otherwise
1087 tcSplitIOType_maybe ty 
1088   | Just (io_tycon, [io_res_ty]) <- tcSplitTyConApp_maybe ty,
1089         -- This split absolutely has to be a tcSplit, because we must
1090         -- see the IO type; and it's a newtype which is transparent to splitTyConApp.
1091     io_tycon `hasKey` ioTyConKey
1092   = Just (io_tycon, io_res_ty)
1093
1094   | Just ty' <- coreView ty     -- Look through non-recursive newtypes
1095   = tcSplitIOType_maybe ty'
1096
1097   | otherwise
1098   = Nothing
1099
1100 isFFITy :: Type -> Bool
1101 -- True for any TyCon that can possibly be an arg or result of an FFI call
1102 isFFITy ty = checkRepTyCon legalFFITyCon ty
1103
1104 isFFIArgumentTy :: DynFlags -> Safety -> Type -> Bool
1105 -- Checks for valid argument type for a 'foreign import'
1106 isFFIArgumentTy dflags safety ty 
1107    = checkRepTyCon (legalOutgoingTyCon dflags safety) ty
1108
1109 isFFIExternalTy :: Type -> Bool
1110 -- Types that are allowed as arguments of a 'foreign export'
1111 isFFIExternalTy ty = checkRepTyCon legalFEArgTyCon ty
1112
1113 isFFIImportResultTy :: DynFlags -> Type -> Bool
1114 isFFIImportResultTy dflags ty 
1115   = checkRepTyCon (legalFIResultTyCon dflags) ty
1116
1117 isFFIExportResultTy :: Type -> Bool
1118 isFFIExportResultTy ty = checkRepTyCon legalFEResultTyCon ty
1119
1120 isFFIDynArgumentTy :: Type -> Bool
1121 -- The argument type of a foreign import dynamic must be Ptr, FunPtr, Addr,
1122 -- or a newtype of either.
1123 isFFIDynArgumentTy = checkRepTyConKey [ptrTyConKey, funPtrTyConKey]
1124
1125 isFFIDynResultTy :: Type -> Bool
1126 -- The result type of a foreign export dynamic must be Ptr, FunPtr, Addr,
1127 -- or a newtype of either.
1128 isFFIDynResultTy = checkRepTyConKey [ptrTyConKey, funPtrTyConKey]
1129
1130 isFFILabelTy :: Type -> Bool
1131 -- The type of a foreign label must be Ptr, FunPtr, Addr,
1132 -- or a newtype of either.
1133 isFFILabelTy = checkRepTyConKey [ptrTyConKey, funPtrTyConKey]
1134
1135 isFFIDotnetTy :: DynFlags -> Type -> Bool
1136 isFFIDotnetTy dflags ty
1137   = checkRepTyCon (\ tc -> (legalFIResultTyCon dflags tc || 
1138                            isFFIDotnetObjTy ty || isStringTy ty)) ty
1139
1140 -- Support String as an argument or result from a .NET FFI call.
1141 isStringTy ty = 
1142   case tcSplitTyConApp_maybe (repType ty) of
1143     Just (tc, [arg_ty])
1144       | tc == listTyCon ->
1145         case tcSplitTyConApp_maybe (repType arg_ty) of
1146           Just (cc,[]) -> cc == charTyCon
1147           _ -> False
1148     _ -> False
1149
1150 -- Support String as an argument or result from a .NET FFI call.
1151 isFFIDotnetObjTy ty = 
1152   let
1153    (_, t_ty) = tcSplitForAllTys ty
1154   in
1155   case tcSplitTyConApp_maybe (repType t_ty) of
1156     Just (tc, [arg_ty]) | getName tc == objectTyConName -> True
1157     _ -> False
1158
1159 toDNType :: Type -> DNType
1160 toDNType ty
1161   | isStringTy ty = DNString
1162   | isFFIDotnetObjTy ty = DNObject
1163   | Just (tc,argTys) <- tcSplitTyConApp_maybe ty 
1164   =  case lookup (getUnique tc) dn_assoc of
1165        Just x  -> x
1166        Nothing 
1167          | tc `hasKey` ioTyConKey -> toDNType (head argTys)
1168          | otherwise -> pprPanic ("toDNType: unsupported .NET type") 
1169                           (pprType ty <+> parens (hcat (map pprType argTys)) <+> ppr tc)
1170   | otherwise = panic "toDNType"        -- Is this right?
1171     where
1172       dn_assoc :: [ (Unique, DNType) ]
1173       dn_assoc = [ (unitTyConKey,   DNUnit)
1174                  , (intTyConKey,    DNInt)
1175                  , (int8TyConKey,   DNInt8)
1176                  , (int16TyConKey,  DNInt16)
1177                  , (int32TyConKey,  DNInt32)
1178                  , (int64TyConKey,  DNInt64)
1179                  , (wordTyConKey,   DNInt)
1180                  , (word8TyConKey,  DNWord8)
1181                  , (word16TyConKey, DNWord16)
1182                  , (word32TyConKey, DNWord32)
1183                  , (word64TyConKey, DNWord64)
1184                  , (floatTyConKey,  DNFloat)
1185                  , (doubleTyConKey, DNDouble)
1186                  , (ptrTyConKey,    DNPtr)
1187                  , (funPtrTyConKey, DNPtr)
1188                  , (charTyConKey,   DNChar)
1189                  , (boolTyConKey,   DNBool)
1190                  ]
1191
1192 checkRepTyCon :: (TyCon -> Bool) -> Type -> Bool
1193         -- Look through newtypes
1194         -- Non-recursive ones are transparent to splitTyConApp,
1195         -- but recursive ones aren't.  Manuel had:
1196         --      newtype T = MkT (Ptr T)
1197         -- and wanted it to work...
1198 checkRepTyCon check_tc ty 
1199   | Just (tc,_) <- splitTyConApp_maybe (repType ty) = check_tc tc
1200   | otherwise                                       = False
1201
1202 checkRepTyConKey :: [Unique] -> Type -> Bool
1203 -- Like checkRepTyCon, but just looks at the TyCon key
1204 checkRepTyConKey keys
1205   = checkRepTyCon (\tc -> tyConUnique tc `elem` keys)
1206 \end{code}
1207
1208 ----------------------------------------------
1209 These chaps do the work; they are not exported
1210 ----------------------------------------------
1211
1212 \begin{code}
1213 legalFEArgTyCon :: TyCon -> Bool
1214 legalFEArgTyCon tc
1215   -- It's illegal to make foreign exports that take unboxed
1216   -- arguments.  The RTS API currently can't invoke such things.  --SDM 7/2000
1217   = boxedMarshalableTyCon tc
1218
1219 legalFIResultTyCon :: DynFlags -> TyCon -> Bool
1220 legalFIResultTyCon dflags tc
1221   | tc == unitTyCon         = True
1222   | otherwise               = marshalableTyCon dflags tc
1223
1224 legalFEResultTyCon :: TyCon -> Bool
1225 legalFEResultTyCon tc
1226   | tc == unitTyCon         = True
1227   | otherwise               = boxedMarshalableTyCon tc
1228
1229 legalOutgoingTyCon :: DynFlags -> Safety -> TyCon -> Bool
1230 -- Checks validity of types going from Haskell -> external world
1231 legalOutgoingTyCon dflags safety tc
1232   = marshalableTyCon dflags tc
1233
1234 legalFFITyCon :: TyCon -> Bool
1235 -- True for any TyCon that can possibly be an arg or result of an FFI call
1236 legalFFITyCon tc
1237   = isUnLiftedTyCon tc || boxedMarshalableTyCon tc || tc == unitTyCon
1238
1239 marshalableTyCon dflags tc
1240   =  (dopt Opt_GlasgowExts dflags && isUnLiftedTyCon tc)
1241   || boxedMarshalableTyCon tc
1242
1243 boxedMarshalableTyCon tc
1244    = getUnique tc `elem` [ intTyConKey, int8TyConKey, int16TyConKey
1245                          , int32TyConKey, int64TyConKey
1246                          , wordTyConKey, word8TyConKey, word16TyConKey
1247                          , word32TyConKey, word64TyConKey
1248                          , floatTyConKey, doubleTyConKey
1249                          , ptrTyConKey, funPtrTyConKey
1250                          , charTyConKey
1251                          , stablePtrTyConKey
1252                          , boolTyConKey
1253                          ]
1254 \end{code}