TcTyClsDecls.lhs 45.4 KB
Newer Older
1
%
2
% (c) The University of Glasgow 2006
3
% (c) The AQUA Project, Glasgow University, 1996-1998
4
%
5
6

TcTyClsDecls: Typecheck type and class declarations
7
8
9

\begin{code}
module TcTyClsDecls (
10
	tcTyAndClassDecls, tcFamInstDecl
11
12
    ) where

13
#include "HsVersions.h"
14

15
16
17
18
19
import HsSyn
import HsTypes
import BasicTypes
import HscTypes
import BuildTyCl
20
import TcRnMonad
21
22
23
24
25
26
import TcEnv
import TcTyDecls
import TcClassDcl
import TcHsType
import TcMType
import TcType
27
import FunDeps
28
29
30
31
32
33
34
35
36
import Type
import Generics
import Class
import TyCon
import DataCon
import Var
import VarSet
import Name
import OccName
sof's avatar
sof committed
37
import Outputable
38
39
40
41
42
43
44
45
46
47
import Maybes
import Monad
import Unify
import Util
import SrcLoc
import ListSetOps
import Digraph
import DynFlags

import Data.List        ( partition, elemIndex )
48
import Control.Monad    ( mplus )
49
50
\end{code}

51
52
53
54
55
56
57

%************************************************************************
%*									*
\subsection{Type checking for type and class declarations}
%*									*
%************************************************************************

58
59
Dealing with a group
~~~~~~~~~~~~~~~~~~~~
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
Consider a mutually-recursive group, binding 
a type constructor T and a class C.

Step 1: 	getInitialKind
	Construct a KindEnv by binding T and C to a kind variable 

Step 2: 	kcTyClDecl
	In that environment, do a kind check

Step 3: Zonk the kinds

Step 4: 	buildTyConOrClass
	Construct an environment binding T to a TyCon and C to a Class.
	a) Their kinds comes from zonking the relevant kind variable
	b) Their arity (for synonyms) comes direct from the decl
	c) The funcional dependencies come from the decl
	d) The rest comes a knot-tied binding of T and C, returned from Step 4
	e) The variances of the tycons in the group is calculated from 
		the knot-tied stuff

Step 5: 	tcTyClDecl1
	In this environment, walk over the decls, constructing the TyCons and Classes.
	This uses in a strict way items (a)-(c) above, which is why they must
83
84
85
	be constructed in Step 4. Feed the results back to Step 4.
	For this step, pass the is-recursive flag as the wimp-out flag
	to tcTyClDecl1.
86
	
87

88
Step 6:		Extend environment
89
90
91
	We extend the type environment with bindings not only for the TyCons and Classes,
	but also for their "implicit Ids" like data constructors and class selectors

92
93
94
95
96
Step 7:		checkValidTyCl
	For a recursive group only, check all the decls again, just
	to check all the side conditions on validity.  We could not
	do this before because we were in a mutually recursive knot.

97
98
Identification of recursive TyCons
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
99
The knot-tying parameters: @rec_details_list@ is an alist mapping @Name@s to
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
@TyThing@s.

Identifying a TyCon as recursive serves two purposes

1.  Avoid infinite types.  Non-recursive newtypes are treated as
"transparent", like type synonyms, after the type checker.  If we did
this for all newtypes, we'd get infinite types.  So we figure out for
each newtype whether it is "recursive", and add a coercion if so.  In
effect, we are trying to "cut the loops" by identifying a loop-breaker.

2.  Avoid infinite unboxing.  This is nothing to do with newtypes.
Suppose we have
        data T = MkT Int T
        f (MkT x t) = f t
Well, this function diverges, but we don't want the strictness analyser
to diverge.  But the strictness analyser will diverge because it looks
deeper and deeper into the structure of T.   (I believe there are
examples where the function does something sane, and the strictness
analyser still diverges, but I can't see one now.)

Now, concerning (1), the FC2 branch currently adds a coercion for ALL
newtypes.  I did this as an experiment, to try to expose cases in which
the coercions got in the way of optimisations.  If it turns out that we
can indeed always use a coercion, then we don't risk recursive types,
and don't need to figure out what the loop breakers are.

For newtype *families* though, we will always have a coercion, so they
are always loop breakers!  So you can easily adjust the current
algorithm by simply treating all newtype families as loop breakers (and
indeed type families).  I think.
130

131
\begin{code}
132
tcTyAndClassDecls :: ModDetails -> [LTyClDecl Name]
133
134
   	           -> TcM TcGblEnv 	-- Input env extended by types and classes 
					-- and their implicit Ids,DataCons
135
136
137
tcTyAndClassDecls boot_details allDecls
  = do	{       -- Omit instances of indexed types; they are handled together
		-- with the *heads* of class instances
138
        ; let decls = filter (not . isFamInstDecl . unLoc) allDecls
139
140

        	-- First check for cyclic type synonysm or classes
141
		-- See notes with checkCycleErrs
142
	; checkCycleErrs decls
143
	; mod <- getModule
144
	; traceTc (text "tcTyAndCl" <+> ppr mod)
145
	; (syn_tycons, alg_tyclss) <- fixM (\ ~(rec_syn_tycons, rec_alg_tyclss) ->
146
147
148
149
150
	  do	{ let {	-- Seperate ordinary synonyms from all other type and
			-- class declarations and add all associated type
			-- declarations from type classes.  The latter is
			-- required so that the temporary environment for the
			-- knot includes all associated family declarations.
151
		      ; (syn_decls, alg_decls) = partition (isSynDecl . unLoc)
152
153
154
						   decls
		      ; alg_at_decls           = concatMap addATs alg_decls
		      }
155
156
157
			-- Extend the global env with the knot-tied results
			-- for data types and classes
			-- 
158
159
160
161
162
			-- We must populate the environment with the loop-tied
			-- T's right away, because the kind checker may "fault
			-- in" some type  constructors that recursively
			-- mention T
		; let gbl_things = mkGlobalThings alg_at_decls rec_alg_tyclss
163
164
165
166
167
		; tcExtendRecEnv gbl_things $ do

			-- Kind-check the declarations
		{ (kc_syn_decls, kc_alg_decls) <- kcTyClDecls syn_decls alg_decls

168
169
		; let {	-- Calculate rec-flag
		      ; calc_rec  = calcRecFlags boot_details rec_alg_tyclss
170
		      ; tc_decl   = addLocM (tcTyClDecl calc_rec) }
171

172
			-- Type-check the type synonyms, and extend the envt
173
		; syn_tycons <- tcSynDecls kc_syn_decls
174
175
176
177
		; tcExtendGlobalEnv syn_tycons $ do

			-- Type-check the data types and classes
		{ alg_tyclss <- mappM tc_decl kc_alg_decls
178
		; return (syn_tycons, concat alg_tyclss)
179
	    }}})
180
181
	-- Finished with knot-tying now
	-- Extend the environment with the finished things
182
	; tcExtendGlobalEnv (syn_tycons ++ alg_tyclss) $ do
183
184
185

	-- Perform the validity check
	{ traceTc (text "ready for validity check")
186
	; mappM_ (addLocM checkValidTyCl) decls
187
 	; traceTc (text "done")
188
   
189
190
191
	-- Add the implicit things;
	-- we want them in the environment because 
	-- they may be mentioned in interface files
192
193
194
	-- NB: All associated types and their implicit things will be added a
	--     second time here.  This doesn't matter as the definitions are
	--     the same.
195
	; let {	implicit_things = concatMap implicitTyThings alg_tyclss }
196
197
	; traceTc ((text "Adding" <+> ppr alg_tyclss) 
		   $$ (text "and" <+> ppr implicit_things))
198
199
  	; tcExtendGlobalEnv implicit_things getGblEnv
    }}
200
  where
201
202
203
204
205
    -- Pull associated types out of class declarations, to tie them into the
    -- knot above.  
    -- NB: We put them in the same place in the list as `tcTyClDecl' will
    --	   eventually put the matching `TyThing's.  That's crucial; otherwise,
    --	   the two argument lists of `mkGlobalThings' don't match up.
206
207
    addATs decl@(L _ (ClassDecl {tcdATs = ats})) = decl : ats
    addATs decl				         = [decl]
208

209
mkGlobalThings :: [LTyClDecl Name] 	-- The decls
210
211
212
213
214
215
	       -> [TyThing]		-- Knot-tied, in 1-1 correspondence with the decls
	       -> [(Name,TyThing)]
-- Driven by the Decls, and treating the TyThings lazily
-- make a TypeEnv for the new things
mkGlobalThings decls things
  = map mk_thing (decls `zipLazy` things)
216
  where
217
    mk_thing (L _ (ClassDecl {tcdLName = L _ name}), ~(AClass cl))
218
	 = (name, AClass cl)
219
    mk_thing (L _ decl, ~(ATyCon tc))
220
         = (tcdName decl, ATyCon tc)
221
\end{code}
222
223


224
225
%************************************************************************
%*									*
226
\subsection{Type checking family instances}
227
228
229
%*									*
%************************************************************************

230
231
232
233
Family instances are somewhat of a hybrid.  They are processed together with
class instance heads, but can contain data constructors and hence they share a
lot of kinding and type checking code with ordinary algebraic data types (and
GADTs).
234
235

\begin{code}
236
237
tcFamInstDecl :: LTyClDecl Name -> TcM (Maybe TyThing)   -- Nothing if error
tcFamInstDecl (L loc decl)
238
  =	-- Prime error recovery, set source location
239
    recoverM (returnM Nothing)		        $
240
241
    setSrcSpan loc				$
    tcAddDeclCtxt decl				$
242
    do { -- type families require -findexed-types and can't be in an
243
	 -- hs-boot file
chak@cse.unsw.edu.au.'s avatar
chak@cse.unsw.edu.au. committed
244
       ; gla_exts <- doptM Opt_IndexedTypes
245
       ; is_boot  <- tcIsHsBoot	  -- Are we compiling an hs-boot file?
246
247
       ; checkTc gla_exts      $ badFamInstDecl (tcdLName decl)
       ; checkTc (not is_boot) $ badBootFamInstDeclErr
248
249

	 -- perform kind and type checking
250
       ; tcFamInstDecl1 decl
251
252
       }

253
tcFamInstDecl1 :: TyClDecl Name -> TcM (Maybe TyThing)   -- Nothing if error
254

255
256
  -- "type instance"
tcFamInstDecl1 (decl@TySynonym {tcdLName = L loc tc_name})
257
258
259
260
261
262
  = kcIdxTyPats decl $ \k_tvs k_typats resKind family ->
    do { -- check that the family declaration is for a synonym
	 unless (isSynTyCon family) $
	   addErr (wrongKindOfFamily family)

       ; -- (1) kind check the right hand side of the type equation
263
264
       ; k_rhs <- kcCheckHsType (tcdSynRhs decl) resKind

265
266
         -- (2) type check type equation
       ; tcTyVarBndrs k_tvs $ \t_tvs -> do {  -- turn kinded into proper tyvars
267
268
269
       ; t_typats <- mappM tcHsKindedType k_typats
       ; t_rhs    <- tcHsKindedType k_rhs

270
271
272
273
274
275
         -- (3) construct representation tycon
       ; rep_tc_name <- newFamInstTyConName tc_name (srcSpanStart loc)
       ; tycon <- buildSynTyCon rep_tc_name t_tvs (SynonymTyCon t_rhs) 
                                (Just (family, t_typats))

       ; return $ Just (ATyCon tycon)
276
       }}
277
278

  -- "newtype instance" and "data instance"
279
280
tcFamInstDecl1 (decl@TyData {tcdND = new_or_data, tcdLName = L loc tc_name,
			     tcdCons = cons})
281
  = kcIdxTyPats decl $ \k_tvs k_typats resKind family ->
282
283
284
285
286
287
    do { -- check that the family declaration is for the right kind
	 unless (new_or_data == NewType  && isNewTyCon  family ||
		 new_or_data == DataType && isDataTyCon family) $
	   addErr (wrongKindOfFamily family)

       ; -- (1) kind check the data declaration as usual
288
       ; k_decl <- kcDataDecl decl k_tvs
289
290
       ; let k_ctxt = tcdCtxt k_decl
	     k_cons = tcdCons k_decl
291
292
293
294

         -- result kind must be '*' (otherwise, we have too few patterns)
       ; checkTc (isLiftedTypeKind resKind) $ tooFewParmsErr tc_name

295
296
         -- (2) type check indexed data type declaration
       ; tcTyVarBndrs k_tvs $ \t_tvs -> do {  -- turn kinded into proper tyvars
297
298
299
300
301
302
       ; unbox_strict <- doptM Opt_UnboxStrictFields

	 -- Check that we don't use GADT syntax for indexed types
       ; checkTc h98_syntax (badGadtIdxTyDecl tc_name)

	 -- Check that a newtype has exactly one constructor
303
304
       ; checkTc (new_or_data == DataType || isSingleton k_cons) $
	   newtypeConError tc_name (length k_cons)
305

306
       ; t_typats     <- mappM tcHsKindedType k_typats
307
       ; stupid_theta <- tcHsKindedContext k_ctxt
308

309
         -- (3) construct representation tycon
310
       ; rep_tc_name <- newFamInstTyConName tc_name (srcSpanStart loc)
311
       ; tycon <- fixM (\ tycon -> do 
312
	     { data_cons <- mappM (addLocM (tcConDecl unbox_strict tycon t_tvs))
313
314
315
316
				  k_cons
	     ; tc_rhs <-
		 case new_or_data of
		   DataType -> return (mkDataTyConRhs data_cons)
317
318
319
320
		   NewType  -> ASSERT( isSingleton data_cons )
			       mkNewTyConRhs tc_name tycon (head data_cons)
	     ; buildAlgTyCon rep_tc_name t_tvs stupid_theta tc_rhs Recursive
			     False h98_syntax (Just (family, t_typats))
321
322
323
324
325
326
327
328
                 -- We always assume that indexed types are recursive.  Why?
                 -- (1) Due to their open nature, we can never be sure that a
                 -- further instance might not introduce a new recursive
                 -- dependency.  (2) They are always valid loop breakers as
                 -- they involve a coercion.
	     })

         -- construct result
329
       ; return $ Just (ATyCon tycon)
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
       }}
       where
	 h98_syntax = case cons of 	-- All constructors have same shape
			L _ (ConDecl { con_res = ResTyGADT _ }) : _ -> False
			other -> True

-- Kind checking of indexed types
-- -

-- Kind check type patterns and kind annotate the embedded type variables.
--
-- * Here we check that a type instance matches its kind signature, but we do
--   not check whether there is a pattern for each type index; the latter
--   check is only required for type functions.
--
kcIdxTyPats :: TyClDecl Name
346
	    -> ([LHsTyVarBndr Name] -> [LHsType Name] -> Kind -> TyCon -> TcM a)
347
348
349
350
	       -- ^^kinded tvs         ^^kinded ty pats  ^^res kind
	    -> TcM a
kcIdxTyPats decl thing_inside
  = kcHsTyVars (tcdTyVars decl) $ \tvs -> 
351
352
    do { family <- tcLookupLocatedTyCon (tcdLName decl)
       ; let { (kinds, resKind) = splitKindFunTys (tyConKind family)
353
	     ; hs_typats	= fromJust $ tcdTyPats decl }
354
355
356
357
358
359
360

         -- we may not have more parameters than the kind indicates
       ; checkTc (length kinds >= length hs_typats) $
	   tooManyParmsErr (tcdLName decl)

         -- type functions can have a higher-kinded result
       ; let resultKind = mkArrowKinds (drop (length hs_typats) kinds) resKind
361
       ; typats <- TcRnMonad.zipWithM kcCheckHsType hs_typats kinds
362
       ; thing_inside tvs typats resultKind family
363
       }
364
  where
365
366
367
\end{code}


368
369
%************************************************************************
%*									*
370
		Kind checking
371
372
%*									*
%************************************************************************
373

374
375
We need to kind check all types in the mutually recursive group
before we know the kind of the type variables.  For example:
376
377
378
379
380
381
382
383
384
385
386

class C a where
   op :: D b => a -> b -> b

class D c where
   bop :: (Monad c) => ...

Here, the kind of the locally-polymorphic type variable "b"
depends on *all the uses of class D*.  For example, the use of
Monad c in bop's type signature means that D must have kind Type->Type.

387
388
389
390
391
392
393
394
However type synonyms work differently.  They can have kinds which don't
just involve (->) and *:
	type R = Int#		-- Kind #
	type S a = Array# a	-- Kind * -> #
	type T a b = (# a,b #)	-- Kind * -> * -> (# a,b #)
So we must infer their kinds from their right-hand sides *first* and then
use them, whereas for the mutually recursive data types D we bring into
scope kind bindings D -> k, where k is a kind variable, and do inference.
395

396
397
398
399
400
Indexed Types
~~~~~~~~~~~~~
This treatment of type synonyms only applies to Haskell 98-style synonyms.
General type functions can be recursive, and hence, appear in `alg_decls'.

401
The kind of a type family is solely determinded by its kind signature;
402
403
hence, only kind signatures participate in the construction of the initial
kind environment (as constructed by `getInitialKind').  In fact, we ignore
404
405
instances of families altogether in the following.  However, we need to
include the kinds of associated families into the construction of the
406
407
initial kind environment.  (This is handled by `allDecls').

408
409
\begin{code}
kcTyClDecls syn_decls alg_decls
410
411
412
413
  = do	{ 	-- First extend the kind env with each data type, class, and
		-- indexed type, mapping them to a type variable
          let initialKindDecls = concat [allDecls decl | L _ decl <- alg_decls]
	; alg_kinds <- mappM getInitialKind initialKindDecls
414
415
416
417
418
419
420
421
422
423
424
	; tcExtendKindEnv alg_kinds $ do

		-- Now kind-check the type synonyms, in dependency order
		-- We do these differently to data type and classes,
		-- because a type synonym can be an unboxed type
		--	type Foo = Int#
		-- and a kind variable can't unify with UnboxedTypeKind
		-- So we infer their kinds in dependency order
	{ (kc_syn_decls, syn_kinds) <- kcSynDecls (calcSynCycles syn_decls)
	; tcExtendKindEnv syn_kinds $  do

425
426
427
428
429
		-- Now kind-check the data type, class, and kind signatures,
		-- returning kind-annotated decls; we don't kind-check
		-- instances of indexed types yet, but leave this to
		-- `tcInstDecls1'
	{ kc_alg_decls <- mappM (wrapLocM kcTyClDecl) 
430
			    (filter (not . isFamInstDecl . unLoc) alg_decls)
431
432

	; return (kc_syn_decls, kc_alg_decls) }}}
433
434
435
436
437
  where
    -- get all declarations relevant for determining the initial kind
    -- environment
    allDecls (decl@ClassDecl {tcdATs = ats}) = decl : [ at 
						      | L _ at <- ats
438
439
440
						      , isFamilyDecl at]
    allDecls decl | isFamInstDecl decl = []
		  | otherwise	       = [decl]
441

442
------------------------------------------------------------------------
443
444
445
getInitialKind :: TyClDecl Name -> TcM (Name, TcKind)
-- Only for data type, class, and indexed type declarations
-- Get as much info as possible from the data, class, or indexed type decl,
446
-- so as to maximise usefulness of error messages
447
getInitialKind decl
448
449
450
451
452
453
454
  = do 	{ arg_kinds <- mapM (mk_arg_kind . unLoc) (tyClDeclTyVars decl)
	; res_kind  <- mk_res_kind decl
	; return (tcdName decl, mkArrowKinds arg_kinds res_kind) }
  where
    mk_arg_kind (UserTyVar _)        = newKindVar
    mk_arg_kind (KindedTyVar _ kind) = return kind

455
456
457
    mk_res_kind (TyFamily { tcdKind    = Just kind }) = return kind
    mk_res_kind (TyData   { tcdKindSig = Just kind }) = return kind
	-- On GADT-style declarations we allow a kind signature
458
459
	--	data T :: *->* where { ... }
    mk_res_kind other = return liftedTypeKind
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490


----------------
kcSynDecls :: [SCC (LTyClDecl Name)] 
	   -> TcM ([LTyClDecl Name], 	-- Kind-annotated decls
		   [(Name,TcKind)])	-- Kind bindings
kcSynDecls []
  = return ([], [])
kcSynDecls (group : groups)
  = do	{ (decl,  nk)  <- kcSynDecl group
	; (decls, nks) <- tcExtendKindEnv [nk] (kcSynDecls groups)
	; return (decl:decls, nk:nks) }
			
----------------
kcSynDecl :: SCC (LTyClDecl Name) 
	   -> TcM (LTyClDecl Name, 	-- Kind-annotated decls
		   (Name,TcKind))	-- Kind bindings
kcSynDecl (AcyclicSCC ldecl@(L loc decl))
  = tcAddDeclCtxt decl	$
    kcHsTyVars (tcdTyVars decl) (\ k_tvs ->
    do { traceTc (text "kcd1" <+> ppr (unLoc (tcdLName decl)) <+> brackets (ppr (tcdTyVars decl)) 
			<+> brackets (ppr k_tvs))
       ; (k_rhs, rhs_kind) <- kcHsType (tcdSynRhs decl)
       ; traceTc (text "kcd2" <+> ppr (unLoc (tcdLName decl)))
       ; let tc_kind = foldr (mkArrowKind . kindedTyVarKind) rhs_kind k_tvs
       ; return (L loc (decl { tcdTyVars = k_tvs, tcdSynRhs = k_rhs }),
		 (unLoc (tcdLName decl), tc_kind)) })

kcSynDecl (CyclicSCC decls)
  = do { recSynErr decls; failM }	-- Fail here to avoid error cascade
					-- of out-of-scope tycons
491

492
493
kindedTyVarKind (L _ (KindedTyVar _ k)) = k

494
495
496
------------------------------------------------------------------------
kcTyClDecl :: TyClDecl Name -> TcM (TyClDecl Name)
	-- Not used for type synonyms (see kcSynDecl)
497

498
kcTyClDecl decl@(TyData {})
499
  = ASSERT( not . isFamInstDecl $ decl )   -- must not be a family instance
500
501
    kcTyClDeclBody decl	$
      kcDataDecl decl
502

503
kcTyClDecl decl@(TyFamily {tcdKind = kind})
504
  = kcTyClDeclBody decl $ \ tvs' ->
505
506
507
      return (decl {tcdTyVars = tvs', 
		    tcdKind = kind `mplus` Just liftedTypeKind})
		    -- default result kind is '*'
508

509
kcTyClDecl decl@(ClassDecl {tcdCtxt = ctxt, tcdSigs = sigs, tcdATs = ats})
510
  = kcTyClDeclBody decl	$ \ tvs' ->
511
512
    do	{ is_boot <- tcIsHsBoot
	; ctxt' <- kcHsContext ctxt	
513
514
515
516
	; ats'  <- mappM (wrapLocM kcTyClDecl) ats
	; sigs' <- mappM (wrapLocM kc_sig    ) sigs
	; return (decl {tcdTyVars = tvs', tcdCtxt = ctxt', tcdSigs = sigs',
		        tcdATs = ats'}) }
517
  where
518
519
    kc_sig (TypeSig nm op_ty) = do { op_ty' <- kcHsLiftedSigType op_ty
				   ; return (TypeSig nm op_ty') }
520
521
    kc_sig other_sig	      = return other_sig

522
kcTyClDecl decl@(ForeignType {})
523
524
  = return decl

525
kcTyClDeclBody :: TyClDecl Name
526
	       -> ([LHsTyVarBndr Name] -> TcM a)
527
	       -> TcM a
528
529
530
531
-- getInitialKind has made a suitably-shaped kind for the type or class
-- Unpack it, and attribute those kinds to the type variables
-- Extend the env with bindings for the tyvars, taken from
-- the kind of the tycon/class.  Give it to the thing inside, and 
532
-- check the result kind matches
533
kcTyClDeclBody decl thing_inside
534
  = tcAddDeclCtxt decl		$
535
    do 	{ tc_ty_thing <- tcLookupLocated (tcdLName decl)
536
537
538
539
540
541
542
	; let tc_kind	 = case tc_ty_thing of { AThing k -> k }
	      (kinds, _) = splitKindFunTys tc_kind
	      hs_tvs 	 = tcdTyVars decl
	      kinded_tvs = ASSERT( length kinds >= length hs_tvs )
			   [ L loc (KindedTyVar (hsTyVarName tv) k)
			   | (L loc tv, k) <- zip hs_tvs kinds]
	; tcExtendKindEnvTvs kinded_tvs (thing_inside kinded_tvs) }
543
544
545
546
547
548
549
550
551
552
553
554

-- Kind check a data declaration, assuming that we already extended the
-- kind environment with the type variables of the left-hand side (these
-- kinded type variables are also passed as the second parameter).
--
kcDataDecl :: TyClDecl Name -> [LHsTyVarBndr Name] -> TcM (TyClDecl Name)
kcDataDecl decl@(TyData {tcdND = new_or_data, tcdCtxt = ctxt, tcdCons = cons})
	   tvs
  = do	{ ctxt' <- kcHsContext ctxt	
	; cons' <- mappM (wrapLocM kc_con_decl) cons
	; return (decl {tcdTyVars = tvs, tcdCtxt = ctxt', tcdCons = cons'}) }
  where
555
556
    -- doc comments are typechecked to Nothing here
    kc_con_decl (ConDecl name expl ex_tvs ex_ctxt details res _) = do
557
558
559
560
561
562
      kcHsTyVars ex_tvs $ \ex_tvs' -> do
        ex_ctxt' <- kcHsContext ex_ctxt
        details' <- kc_con_details details 
        res'     <- case res of
          ResTyH98 -> return ResTyH98
          ResTyGADT ty -> do { ty' <- kcHsSigType ty; return (ResTyGADT ty') }
563
        return (ConDecl name expl ex_tvs' ex_ctxt' details' res' Nothing)
564
565
566
567
568
569
570
571

    kc_con_details (PrefixCon btys) 
	= do { btys' <- mappM kc_larg_ty btys ; return (PrefixCon btys') }
    kc_con_details (InfixCon bty1 bty2) 
	= do { bty1' <- kc_larg_ty bty1; bty2' <- kc_larg_ty bty2; return (InfixCon bty1' bty2') }
    kc_con_details (RecCon fields) 
	= do { fields' <- mappM kc_field fields; return (RecCon fields') }

572
    kc_field (HsRecField fld bty d) = do { bty' <- kc_larg_ty bty ; return (HsRecField fld bty' d) }
573
574
575
576
577
578
579

    kc_larg_ty bty = case new_or_data of
			DataType -> kcHsSigType bty
			NewType  -> kcHsLiftedSigType bty
	-- Can't allow an unlifted type for newtypes, because we're effectively
	-- going to remove the constructor while coercing it to a lifted type.
	-- And newtypes can't be bang'd
580
581
582
583
584
\end{code}


%************************************************************************
%*									*
585
\subsection{Type checking}
586
587
%*									*
%************************************************************************
588
589

\begin{code}
590
591
592
593
594
tcSynDecls :: [LTyClDecl Name] -> TcM [TyThing]
tcSynDecls [] = return []
tcSynDecls (decl : decls) 
  = do { syn_tc <- addLocM tcSynDecl decl
       ; syn_tcs <- tcExtendGlobalEnv [syn_tc] (tcSynDecls decls)
595
596
       ; return (syn_tc : syn_tcs) }

597
  -- "type"
598
tcSynDecl
599
600
601
602
  (TySynonym {tcdLName = L _ tc_name, tcdTyVars = tvs, tcdSynRhs = rhs_ty})
  = tcTyVarBndrs tvs		$ \ tvs' -> do 
    { traceTc (text "tcd1" <+> ppr tc_name) 
    ; rhs_ty' <- tcHsKindedType rhs_ty
603
604
605
    ; tycon <- buildSynTyCon tc_name tvs' (SynonymTyCon rhs_ty') Nothing
    ; return (ATyCon tycon) 
    }
606
607

--------------------
608
tcTyClDecl :: (Name -> RecFlag) -> TyClDecl Name -> TcM [TyThing]
609

610
611
tcTyClDecl calc_isrec decl
  = tcAddDeclCtxt decl (tcTyClDecl1 calc_isrec decl)
612

613
  -- "type family" declarations
614
tcTyClDecl1 _calc_isrec 
615
616
617
618
619
  (TyFamily {tcdFlavour = TypeFamily, 
	     tcdLName = L _ tc_name, tcdTyVars = tvs, tcdKind = Just kind})
						      -- NB: kind at latest
						      --     added during
						      --     kind checking
620
  = tcTyVarBndrs tvs  $ \ tvs' -> do 
621
  { traceTc (text "type family: " <+> ppr tc_name) 
622
  ; idx_tys <- doptM Opt_IndexedTypes
623

624
625
	-- Check that we don't use families without -findexed-types
  ; checkTc idx_tys $ badFamInstDecl tc_name
626

627
628
  ; tycon <- buildSynTyCon tc_name tvs' (OpenSynTyCon kind Nothing) Nothing
  ; return [ATyCon tycon]
629
  }
630

631
  -- "newtype family" or "data family" declaration
632
tcTyClDecl1 _calc_isrec 
633
634
  (TyFamily {tcdFlavour = DataFamily new_or_data, 
	     tcdLName = L _ tc_name, tcdTyVars = tvs, tcdKind = mb_kind})
635
  = tcTyVarBndrs tvs  $ \ tvs' -> do 
636
  { traceTc (text "data/newtype family: " <+> ppr tc_name) 
637
  ; extra_tvs <- tcDataKindSig mb_kind
638
639
  ; let final_tvs = tvs' ++ extra_tvs    -- we may not need these

640
  ; idx_tys <- doptM Opt_IndexedTypes
641

642
643
	-- Check that we don't use families without -findexed-types
  ; checkTc idx_tys $ badFamInstDecl tc_name
644
645
646

  ; tycon <- buildAlgTyCon tc_name final_tvs [] 
	       (case new_or_data of
647
648
		  DataType -> mkOpenDataTyConRhs
		  NewType  -> mkOpenNewTyConRhs)
649
	       Recursive False True Nothing
650
  ; return [ATyCon tycon]
651
652
  }

653
  -- "newtype" and "data"
654
tcTyClDecl1 calc_isrec
655
  (TyData {tcdND = new_or_data, tcdCtxt = ctxt, tcdTyVars = tvs,
656
657
658
659
	   tcdLName = L _ tc_name, tcdKindSig = mb_ksig, tcdCons = cons})
  = tcTyVarBndrs tvs	$ \ tvs' -> do 
  { extra_tvs <- tcDataKindSig mb_ksig
  ; let final_tvs = tvs' ++ extra_tvs
660
  ; stupid_theta <- tcHsKindedContext ctxt
661
  ; want_generic <- doptM Opt_Generics
662
663
664
665
666
667
668
  ; unbox_strict <- doptM Opt_UnboxStrictFields
  ; gla_exts     <- doptM Opt_GlasgowExts
  ; is_boot	 <- tcIsHsBoot	-- Are we compiling an hs-boot file?

	-- Check that we don't use GADT syntax in H98 world
  ; checkTc (gla_exts || h98_syntax) (badGadtDecl tc_name)

669
670
671
	-- Check that we don't use kind signatures without Glasgow extensions
  ; checkTc (gla_exts || isNothing mb_ksig) (badSigTyDecl tc_name)

672
673
674
	-- Check that the stupid theta is empty for a GADT-style declaration
  ; checkTc (null stupid_theta || h98_syntax) (badStupidTheta tc_name)

675
	-- Check that there's at least one condecl,
676
	-- or else we're reading an hs-boot file, or -fglasgow-exts
677
678
679
  ; checkTc (not (null cons) || gla_exts || is_boot)
	    (emptyConDeclsErr tc_name)
    
680
	-- Check that a newtype has exactly one constructor
681
682
683
  ; checkTc (new_or_data == DataType || isSingleton cons) 
	    (newtypeConError tc_name (length cons))

684
  ; tycon <- fixM (\ tycon -> do 
685
	{ data_cons <- mappM (addLocM (tcConDecl unbox_strict tycon final_tvs)) 
686
			     cons
687
688
689
690
691
692
693
694
	; tc_rhs <-
	    if null cons && is_boot 	-- In a hs-boot file, empty cons means
	    then return AbstractTyCon	-- "don't know"; hence Abstract
	    else case new_or_data of
		   DataType -> return (mkDataTyConRhs data_cons)
		   NewType  -> 
                       ASSERT( isSingleton data_cons )
                       mkNewTyConRhs tc_name tycon (head data_cons)
695
	; buildAlgTyCon tc_name final_tvs stupid_theta tc_rhs is_rec
696
	    (want_generic && canDoGenerics data_cons) h98_syntax Nothing
697
	})
698
  ; return [ATyCon tycon]
699
  }
700
  where
701
    is_rec   = calc_isrec tc_name
702
    h98_syntax = case cons of 	-- All constructors have same shape
703
			L _ (ConDecl { con_res = ResTyGADT _ }) : _ -> False
704
			other -> True
705

706
tcTyClDecl1 calc_isrec 
707
  (ClassDecl {tcdLName = L _ class_name, tcdTyVars = tvs, 
708
	      tcdCtxt = ctxt, tcdMeths = meths,
709
	      tcdFDs = fundeps, tcdSigs = sigs, tcdATs = ats} )
710
711
  = tcTyVarBndrs tvs		$ \ tvs' -> do 
  { ctxt' <- tcHsKindedContext ctxt
712
  ; fds' <- mappM (addLocM tc_fundep) fundeps
713
  ; atss <- mappM (addLocM (tcTyClDecl1 (const Recursive))) ats
714
  ; let ats' = zipWith setTyThingPoss atss (map (tcdTyVars . unLoc) ats)
715
716
717
718
  ; sig_stuff <- tcClassSigs class_name sigs meths
  ; clas <- fixM (\ clas ->
		let 	-- This little knot is just so we can get
			-- hold of the name of the class TyCon, which we
719
			-- need to look up its recursiveness
720
721
722
		    tycon_name = tyConName (classTyCon clas)
		    tc_isrec = calc_isrec tycon_name
		in
723
		buildClass class_name tvs' ctxt' fds' ats'
724
			   sig_stuff tc_isrec)
725
726
727
728
  ; return (AClass clas : ats')
      -- NB: Order is important due to the call to `mkGlobalThings' when
      --     tying the the type and class declaration type checking knot.
  }
729
  where
730
731
732
    tc_fundep (tvs1, tvs2) = do { tvs1' <- mappM tcLookupTyVar tvs1 ;
				; tvs2' <- mappM tcLookupTyVar tvs2 ;
				; return (tvs1', tvs2') }
733

734
735
736
    -- For each AT argument compute the position of the corresponding class
    -- parameter in the class head.  This will later serve as a permutation
    -- vector when checking the validity of instance declarations.
737
738
739
740
741
742
743
744
745
    setTyThingPoss [ATyCon tycon] atTyVars = 
      let classTyVars = hsLTyVarNames tvs
	  poss        =   catMaybes 
			. map (`elemIndex` classTyVars) 
			. hsLTyVarNames 
			$ atTyVars
		     -- There will be no Nothing, as we already passed renaming
      in 
      ATyCon (setTyConArgPoss tycon poss)
746
    setTyThingPoss _		  _ = panic "TcTyClsDecls.setTyThingPoss"
747

748
tcTyClDecl1 calc_isrec 
749
  (ForeignType {tcdLName = L _ tc_name, tcdExtName = tc_ext_name})
750
  = returnM [ATyCon (mkForeignTyCon tc_name tc_ext_name liftedTypeKind 0)]
751
752

-----------------------------------
753
tcConDecl :: Bool 		-- True <=> -funbox-strict_fields
754
755
756
	  -> TyCon -> [TyVar] 
	  -> ConDecl Name 
	  -> TcM DataCon
757

758
tcConDecl unbox_strict tycon tc_tvs	-- Data types
759
	  (ConDecl name _ tvs ctxt details res_ty _)
760
761
  = tcTyVarBndrs tvs		$ \ tvs' -> do 
    { ctxt' <- tcHsKindedContext ctxt
762
    ; (univ_tvs, ex_tvs, eq_preds, data_tc) <- tcResultType tycon tc_tvs tvs' res_ty
763
    ; let 
764
	-- Tiresome: tidy the tyvar binders, since tc_tvs and tvs' may have the same OccNames
765
	tc_datacon is_infix field_lbls btys
766
	  = do { let bangs = map getBangStrictness btys
767
	       ; arg_tys <- mappM tcHsBangType btys
768
    	       ; buildDataCon (unLoc name) is_infix
769
    		    (argStrictness unbox_strict bangs arg_tys)
770
    		    (map unLoc field_lbls)
771
    		    univ_tvs ex_tvs eq_preds ctxt' arg_tys
772
		    data_tc }
773
774
775
		-- NB:	we put data_tc, the type constructor gotten from the
		--	constructor type signature into the data constructor;
		--	that way checkValidDataCon can complain if it's wrong.
776

777
    ; case details of
778
	PrefixCon btys     -> tc_datacon False [] btys
779
780
781
	InfixCon bty1 bty2 -> tc_datacon True  [] [bty1,bty2]
	RecCon fields      -> tc_datacon False field_names btys
			   where
782
			      (field_names, btys) = unzip [ (n, t) | HsRecField n t _ <- fields ] 
783
784
785
                              
    }

786
787
788
789
790
tcResultType :: TyCon
	     -> [TyVar] 	-- data T a b c = ...
	     -> [TyVar] 	-- where MkT :: forall a b c. ...
	     -> ResType Name
	     -> TcM ([TyVar],	 	-- Universal
791
		     [TyVar],		-- Existential (distinct OccNames from univs)
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
		     [(TyVar,Type)],	-- Equality predicates
		     TyCon)		-- TyCon given in the ResTy
	-- We don't check that the TyCon given in the ResTy is
	-- the same as the parent tycon, becuase we are in the middle
	-- of a recursive knot; so it's postponed until checkValidDataCon

tcResultType decl_tycon tc_tvs dc_tvs ResTyH98
  = return (tc_tvs, dc_tvs, [], decl_tycon)
	-- In H98 syntax the dc_tvs are the existential ones
	--	data T a b c = forall d e. MkT ...
	-- The {a,b,c} are tc_tvs, and {d,e} are dc_tvs

tcResultType _ tc_tvs dc_tvs (ResTyGADT res_ty)
	-- E.g.  data T a b c where
	--	   MkT :: forall x y z. T (x,y) z z
	-- Then we generate
	--	([a,z,c], [x,y], [a:=:(x,y), c:=:z], T)

  = do	{ (dc_tycon, res_tys) <- tcLHsConResTy res_ty
811
812

	; let univ_tvs = choose_univs [] tidy_tc_tvs res_tys
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
		-- Each univ_tv is either a dc_tv or a tc_tv
	      ex_tvs = dc_tvs `minusList` univ_tvs
	      eq_spec = [ (tv, ty) | (tv,ty) <- univ_tvs `zip` res_tys, 
				      tv `elem` tc_tvs]
	; return (univ_tvs, ex_tvs, eq_spec, dc_tycon) }
  where
  	-- choose_univs uses the res_ty itself if it's a type variable
	-- and hasn't already been used; otherwise it uses one of the tc_tvs
    choose_univs used tc_tvs []
	= ASSERT( null tc_tvs ) []
    choose_univs used (tc_tv:tc_tvs) (res_ty:res_tys) 
	| Just tv <- tcGetTyVar_maybe res_ty, not (tv `elem` used)
	= tv    : choose_univs (tv:used) tc_tvs res_tys
	| otherwise
	= tc_tv : choose_univs used tc_tvs res_tys
828

829
830
831
832
833
834
835
836
837
838
839
840
841
	-- NB: tc_tvs and dc_tvs are distinct, but
	-- we want them to be *visibly* distinct, both for
	-- interface files and general confusion.  So rename
	-- the tc_tvs, since they are not used yet (no 
	-- consequential renaming needed)
    init_occ_env     = initTidyOccEnv (map getOccName dc_tvs)
    (_, tidy_tc_tvs) = mapAccumL tidy_one init_occ_env tc_tvs
    tidy_one env tv  = (env', setTyVarName tv (tidyNameOcc name occ'))
	      where
		 name = tyVarName tv
		 (env', occ') = tidyOccName env (getOccName name) 

	      -------------------
842
argStrictness :: Bool		-- True <=> -funbox-strict_fields
843
	      -> [HsBang]
844
	      -> [TcType] -> [StrictnessMark]
845
argStrictness unbox_strict bangs arg_tys
846
 = ASSERT( length bangs == length arg_tys )
847
   zipWith (chooseBoxingStrategy unbox_strict) arg_tys bangs
848
849
850
851

-- We attempt to unbox/unpack a strict field when either:
--   (i)  The field is marked '!!', or
--   (ii) The field is marked '!', and the -funbox-strict-fields flag is on.
852
853
854
--
-- We have turned off unboxing of newtypes because coercions make unboxing 
-- and reboxing more complicated
855
856
chooseBoxingStrategy :: Bool -> TcType -> HsBang -> StrictnessMark
chooseBoxingStrategy unbox_strict_fields arg_ty bang
857
858
  = case bang of
	HsNoBang				    -> NotMarkedStrict
859
860
861
	HsStrict | unbox_strict_fields 
                   && can_unbox arg_ty 		    -> MarkedUnboxed
	HsUnbox  | can_unbox arg_ty		    -> MarkedUnboxed
862
	other					    -> MarkedStrict
863
  where
864
865
866
867
868
    -- we can unbox if the type is a chain of newtypes with a product tycon
    -- at the end
    can_unbox arg_ty = case splitTyConApp_maybe arg_ty of
		   Nothing 	       		-> False
		   Just (arg_tycon, tycon_args) -> 
869
                       not (isRecursiveTyCon arg_tycon) &&	-- Note [Recusive unboxing]
870
871
872
873
		       isProductTyCon arg_tycon &&
                       (if isNewTyCon arg_tycon then 
                            can_unbox (newTyConInstRhs arg_tycon tycon_args)
                        else True)
874
875
\end{code}

876
877
878
879
880
881
882
883
Note [Recursive unboxing]
~~~~~~~~~~~~~~~~~~~~~~~~~
Be careful not to try to unbox this!
	data T = MkT !T Int
But it's the *argument* type that matters. This is fine:
	data S = MkS S !Int
because Int is non-recursive.

884
885
886
887
888
889
%************************************************************************
%*									*
\subsection{Dependency analysis}
%*									*
%************************************************************************

890
891
892
Validity checking is done once the mutually-recursive knot has been
tied, so we can look at things freely.

893
\begin{code}
894
checkCycleErrs :: [LTyClDecl Name] -> TcM ()
895
checkCycleErrs tyclss
896
  | null cls_cycles
897
898
  = return ()
  | otherwise
899
  = do	{ mappM_ recClsErr cls_cycles
900
901
	; failM	}	-- Give up now, because later checkValidTyCl
			-- will loop if the synonym is recursive
902
  where
903
    cls_cycles = calcClassCycles tyclss
904

905
checkValidTyCl :: TyClDecl Name -> TcM ()
906
907
908
909
-- We do the validity check over declarations, rather than TyThings
-- only so that we can add a nice context with tcAddDeclCtxt
checkValidTyCl decl
  = tcAddDeclCtxt decl $
910
    do	{ thing <- tcLookupLocatedGlobal (tcdLName decl)
911
912
913
914
915
916
917
918
	; traceTc (text "Validity of" <+> ppr thing)	
	; case thing of
	    ATyCon tc -> checkValidTyCon tc
	    AClass cl -> checkValidClass cl 
	; traceTc (text "Done validity of" <+> ppr thing)	
	}

-------------------------
919
920
921
922
923
924
925
-- For data types declared with record syntax, we require
-- that each constructor that has a field 'f' 
--	(a) has the same result type
--	(b) has the same type for 'f'
-- module alpha conversion of the quantified type variables
-- of the constructor.

926
checkValidTyCon :: TyCon -> TcM ()
927
checkValidTyCon tc 
928
  | isSynTyCon tc 
929
  = case synTyConRhs tc of
930
931
      OpenSynTyCon _ _ -> return ()
      SynonymTyCon ty  -> checkValidType syn_ctxt ty
932
933
  | otherwise
  = 	-- Check the context on the data decl
934
    checkValidTheta (DataTyCtxt name) (tyConStupidTheta tc)	`thenM_` 
935
936
	
	-- Check arg types of data constructors
937
    mappM_ (checkValidDataCon tc) data_cons			`thenM_`
938

939
940
	-- Check that fields with the same name share a type
    mappM_ check_fields groups
941

942
  where
943
944
945
    syn_ctxt  = TySynCtxt name
    name      = tyConName tc
    data_cons = tyConDataCons tc
946

947
948
    groups = equivClasses cmp_fld (concatMap get_fields data_cons)
    cmp_fld (f1,_) (f2,_) = f1 `compare` f2
949
    get_fields con = dataConFieldLabels con `zip` repeat con
950
	-- dataConFieldLabels may return the empty list, which is fine
951

952
953
954
955
956
957
958
959
960
961
962
963
964
965
    -- See Note [GADT record selectors] in MkId.lhs
    -- We must check (a) that the named field has the same 
    --                   type in each constructor
    --               (b) that those constructors have the same result type
    --
    -- However, the constructors may have differently named type variable
    -- and (worse) we don't know how the correspond to each other.  E.g.
    --     C1 :: forall a b. { f :: a, g :: b } -> T a b
    --     C2 :: forall d c. { f :: c, g :: c } -> T c d
    -- 
    -- So what we do is to ust Unify.tcMatchTys to compare the first candidate's
    -- result type against other candidates' types BOTH WAYS ROUND.
    -- If they magically agrees, take the substitution and
    -- apply them to the latter ones, and see if they match perfectly.
966
    check_fields fields@((label, con1) : other_fields)
967
968
	-- These fields all have the same name, but are from
	-- different constructors in the data type
969
970
	= recoverM (return ()) $ mapM_ checkOne other_fields
                -- Check that all the fields in the group have the same type
971
972
		-- NB: this check assumes that all the constructors of a given
		-- data type use the same type variables
973
        where
974
975
	(tvs1, _, _, res1) = dataConSig con1
        ts1 = mkVarSet tvs1
976
977
978
        fty1 = dataConFieldType con1 label

        checkOne (_, con2)    -- Do it bothways to ensure they are structurally identical
979
980
	    = do { checkFieldCompat label con1 con2 ts1 res1 res2 fty1 fty2
		 ; checkFieldCompat label con2 con1 ts2 res2 res1 fty2 fty1 }
981
	    where        
982
983
		(tvs2, _, _, res2) = dataConSig con2
	   	ts2 = mkVarSet tvs2
984
985
986
987
988
989
                fty2 = dataConFieldType con2 label

checkFieldCompat fld con1 con2 tvs1 res1 res2 fty1 fty2
  = do	{ checkTc (isJust mb_subst1) (resultTypeMisMatch fld con1 con2)
	; checkTc (isJust mb_subst2) (fieldTypeMisMatch fld con1 con2) }
  where
990
    mb_subst1 = tcMatchTy tvs1 res1 res2
991
    mb_subst2 = tcMatchTyX tvs1 (expectJust "checkFieldCompat" mb_subst1) fty1 fty2
992
993

-------------------------------
994
995
checkValidDataCon :: TyCon -> DataCon -> TcM ()
checkValidDataCon tc con
996
997
  = setSrcSpan (srcLocSpan (getSrcLoc con))	$
    addErrCtxt (dataConCtxt con)		$ 
998
    do	{ checkTc (dataConTyCon con == tc) (badDataConTyCon con)
999
1000
1001
	; checkValidType ctxt (dataConUserType con)
	; ifM (isNewTyCon tc) (checkNewDataCon con)
    }
1002
1003
  where
    ctxt = ConArgCtxt (dataConName con) 
1004

1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
-------------------------------
checkNewDataCon :: DataCon -> TcM ()
-- Checks for the data constructor of a newtype
checkNewDataCon con
  = do	{ checkTc (isSingleton arg_tys) (newtypeFieldErr con (length arg_tys))
		-- One argument
	; checkTc (null eq_spec) (newtypePredError con)
		-- Return type is (T a b c)
	; checkTc (null ex_tvs && null theta) (newtypeExError con)
		-- No existentials
    }
  where
1017
    (_univ_tvs, ex_tvs, eq_spec, theta, arg_tys, _res_ty) = dataConFullSig con
1018

1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
-------------------------------
checkValidClass :: Class -> TcM ()
checkValidClass cls
  = do	{ 	-- CHECK ARITY 1 FOR HASKELL 1.4
	  gla_exts <- doptM Opt_GlasgowExts

    	-- Check that the class is unary, unless GlaExs
	; checkTc (notNull tyvars) (nullaryClassErr cls)
	; checkTc (gla_exts || unary) (classArityErr cls)

   	-- Check the super-classes
	; checkValidTheta (ClassSCCtxt (className cls)) theta

	-- Check the class operations
1033
	; mappM_ (check_op gla_exts) op_stuff
1034

1035
1036
1037
1038
1039
  	-- Check that if the class has generic methods, then the
	-- class has only one parameter.  We can't do generic
	-- multi-parameter type classes!
	; checkTc (unary || no_generics) (genericMultiParamErr cls)
	}
1040
  where
1041
1042
1043
    (tyvars, theta, _, op_stuff) = classBigSig cls
    unary 	= isSingleton tyvars
    no_generics = null [() | (_, GenDefMeth) <- op_stuff]
1044

1045
    check_op gla_exts (sel_id, dm) 
1046
1047
      = addErrCtxt (classOpCtxt sel_id tau) $ do
	{ checkValidTheta SigmaCtxt (tail theta)
1048
1049
1050
		-- The 'tail' removes the initial (C a) from the
		-- class itself, leaving just the method type

1051
1052
1053
	; checkValidType (FunSigCtxt op_name) tau

		-- Check that the type mentions at least one of
1054
1055
1056
1057
1058
1059
1060
		-- the class type variables...or at least one reachable
		-- from one of the class variables.  Example: tc223
		--   class Error e => Game b mv e | b -> mv e where
		--      newBoard :: MonadState b m => m ()
		-- Here, MonadState has a fundep m->b, so newBoard is fine
	; let grown_tyvars = grow theta (mkVarSet tyvars)
	; checkTc (tyVarsOfType tau `intersectsVarSet` grown_tyvars)
1061
	          (noClassTyVarErr cls sel_id)
1062
1063
1064

		-- Check that for a generic method, the type of 
		-- the method is sufficiently simple
1065
	; checkTc (dm /= GenDefMeth || validGenericMethodType tau)
1066
		  (badGenericMethodType op_name op_ty)
1067
	}
1068
1069
1070
	where
	  op_name = idName sel_id
	  op_ty   = idType sel_id
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
	  (_,theta1,tau1) = tcSplitSigmaTy op_ty
	  (_,theta2,tau2)  = tcSplitSigmaTy tau1
	  (theta,tau) | gla_exts  = (theta1 ++ theta2, tau2)
		      | otherwise = (theta1, 	       mkPhiTy (tail theta1) tau1)
		-- Ugh!  The function might have a type like
		-- 	op :: forall a. C a => forall b. (Eq b, Eq a) => tau2
		-- With -fglasgow-exts, we want to allow this, even though the inner 
		-- forall has an (Eq a) constraint.  Whereas in general, each constraint 
		-- in the context of a for-all must mention at least one quantified
		-- type variable.  What a mess!
1081
1082
1083


---------------------------------------------------------------------
1084
1085
1086
1087
1088
1089
1090
resultTypeMisMatch field_name con1 con2
  = vcat [sep [ptext SLIT("Constructors") <+> ppr con1 <+> ptext SLIT("and") <+> ppr con2, 
		ptext SLIT("have a common field") <+> quotes (ppr field_name) <> comma],
	  nest 2 $ ptext SLIT("but have different result types")]
fieldTypeMisMatch field_name con1 con2
  = sep [ptext SLIT("Constructors") <+> ppr con1 <+> ptext SLIT("and") <+> ppr con2, 
	 ptext SLIT("give different types for field"), quotes (ppr field_name)]
1091

1092
dataConCtxt con = ptext SLIT("In the definition of data constructor") <+> quotes (ppr con)
1093

1094
1095
classOpCtxt sel_id tau = sep [ptext SLIT("When checking the class method:"),
			      nest 2 (ppr sel_id <+> dcolon <+> ppr tau)]
1096
1097
1098
1099
1100
1101
1102
1103

nullaryClassErr cls
  = ptext SLIT("No parameters for class")  <+> quotes (ppr cls)

classArityErr cls
  = vcat [ptext SLIT("Too many parameters for class") <+> quotes (ppr cls),
	  parens (ptext SLIT("Use -fglasgow-exts to allow multi-parameter classes"))]

1104
1105
1106
1107
1108
noClassTyVarErr clas op
  = sep [ptext SLIT("The class method") <+> quotes (ppr op),
	 ptext SLIT("mentions none of the type variables of the class") <+> 
		ppr clas <+> hsep (map ppr (classTyVars clas))]

1109
1110
1111
1112
1113
1114
1115
genericMultiParamErr clas
  = ptext SLIT("The multi-parameter class") <+> quotes (ppr clas) <+> 
    ptext SLIT("cannot have generic methods")

badGenericMethodType op op_ty
  = hang (ptext SLIT("Generic method type is too complex"))
       4 (vcat [ppr op <+> dcolon <+> ppr op_ty,
1116
		ptext SLIT("You can only use type variables, arrows, lists, and tuples")])
1117

1118
recSynErr syn_decls
1119
  = setSrcSpan (getLoc (head sorted_decls)) $
1120
    addErr (sep [ptext SLIT("Cycle in type synonym declarations:"),
1121
		 nest 2 (vcat (map ppr_decl sorted_decls))])
1122
  where
1123
    sorted_decls = sortLocated syn_decls
1124
    ppr_decl (L loc decl) = ppr loc <> colon <+> ppr decl
1125

1126
recClsErr cls_decls
1127
  = setSrcSpan (getLoc (head sorted_decls)) $
1128
    addErr (sep [ptext SLIT("Cycle in class declarations (via superclasses):"),
1129
		 nest 2 (vcat (map ppr_decl sorted_decls))])
1130
  where
1131
    sorted_decls = sortLocated cls_decls
1132
    ppr_decl (L loc decl) = ppr loc <> colon <+> ppr (decl { tcdSigs = [] })
1133

1134
1135
1136
1137
1138
sortLocated :: [Located a] -> [Located a]
sortLocated things = sortLe le things
  where
    le (L l1 _) (L l2 _) = l1 <= l2

1139
badDataConTyCon data_con
1140
1141
1142
  = hang (ptext SLIT("Data constructor") <+> quotes (ppr data_con) <+>
		ptext SLIT("returns type") <+> quotes (ppr (dataConTyCon data_con)))
       2 (ptext SLIT("instead of its parent type"))
1143
1144
1145
1146

badGadtDecl tc_name
  = vcat [ ptext SLIT("Illegal generalised algebraic data declaration for") <+> quotes (ppr tc_name)
	 , nest 2 (parens $ ptext SLIT("Use -fglasgow-exts to allow GADTs")) ]
1147

1148
1149
1150
badStupidTheta tc_name
  = ptext SLIT("A data type declared in GADT style cannot have a context:") <+> quotes (ppr tc_name)

1151
newtypeConError tycon n
1152
  = sep [ptext SLIT("A newtype must have exactly one constructor,"),
1153
1154
	 nest 2 $ ptext SLIT("but") <+> quotes (ppr tycon) <+> ptext SLIT("has") <+> speakN n ]

1155
1156
1157
1158
newtypeExError con
  = sep [ptext SLIT("A newtype constructor cannot have an existential context,"),
	 nest 2 $ ptext SLIT("but") <+> quotes (ppr con) <+> ptext SLIT("does")]

1159
newtypePredError con