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