Added error checks & fixed bugs
[ghc-hetmet.git] / compiler / hsSyn / HsDecls.lhs
1 %
2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
3 %
4 \section[HsDecls]{Abstract syntax: global declarations}
5
6 Definitions for: @TyDecl@ and @oCnDecl@, @ClassDecl@,
7 @InstDecl@, @DefaultDecl@ and @ForeignDecl@.
8
9 \begin{code}
10 module HsDecls (
11         HsDecl(..), LHsDecl, TyClDecl(..), LTyClDecl, 
12         InstDecl(..), LInstDecl, NewOrData(..),
13         RuleDecl(..), LRuleDecl, RuleBndr(..),
14         DefaultDecl(..), LDefaultDecl, SpliceDecl(..),
15         ForeignDecl(..), LForeignDecl, ForeignImport(..), ForeignExport(..),
16         CImportSpec(..), FoType(..),
17         ConDecl(..), ResType(..), LConDecl,     
18         DeprecDecl(..),  LDeprecDecl,
19         HsGroup(..),  emptyRdrGroup, emptyRnGroup, appendGroups,
20         tcdName, tyClDeclNames, tyClDeclTyVars,
21         isClassDecl, isTFunDecl, isSynDecl, isDataDecl, isKindSigDecl,
22         isIdxTyDecl,
23         countTyClDecls,
24         conDetailsTys,
25         instDeclATs,
26         collectRuleBndrSigTys, 
27     ) where
28
29 #include "HsVersions.h"
30
31 -- friends:
32 import {-# SOURCE #-}   HsExpr( HsExpr, pprExpr )
33         -- Because Expr imports Decls via HsBracket
34
35 import HsBinds          ( HsValBinds(..), HsBind, LHsBinds, plusHsValBinds,
36                           Sig(..), LSig, LFixitySig, pprLHsBinds,
37                           emptyValBindsIn, emptyValBindsOut )
38 import HsPat            ( HsConDetails(..), hsConArgs )
39 import HsImpExp         ( pprHsVar )
40 import HsTypes
41 import NameSet          ( NameSet )
42 import HscTypes         ( DeprecTxt )
43 import CoreSyn          ( RuleName )
44 import Kind             ( Kind, pprKind )
45 import BasicTypes       ( Activation(..) )
46 import ForeignCall      ( CCallTarget(..), DNCallSpec, CCallConv, Safety,
47                           CExportSpec(..), CLabelString ) 
48
49 -- others:
50 import FunDeps          ( pprFundeps )
51 import Class            ( FunDep )
52 import Outputable       
53 import Util             ( count )
54 import SrcLoc           ( Located(..), unLoc, noLoc )
55 import FastString
56 import Maybe            ( isJust )
57 \end{code}
58
59
60 %************************************************************************
61 %*                                                                      *
62 \subsection[HsDecl]{Declarations}
63 %*                                                                      *
64 %************************************************************************
65
66 \begin{code}
67 type LHsDecl id = Located (HsDecl id)
68
69 data HsDecl id
70   = TyClD       (TyClDecl id)
71   | InstD       (InstDecl  id)
72   | ValD        (HsBind id)
73   | SigD        (Sig id)
74   | DefD        (DefaultDecl id)
75   | ForD        (ForeignDecl id)
76   | DeprecD     (DeprecDecl id)
77   | RuleD       (RuleDecl id)
78   | SpliceD     (SpliceDecl id)
79
80 -- NB: all top-level fixity decls are contained EITHER
81 -- EITHER SigDs
82 -- OR     in the ClassDecls in TyClDs
83 --
84 -- The former covers
85 --      a) data constructors
86 --      b) class methods (but they can be also done in the
87 --              signatures of class decls)
88 --      c) imported functions (that have an IfacSig)
89 --      d) top level decls
90 --
91 -- The latter is for class methods only
92
93 -- A [HsDecl] is categorised into a HsGroup before being 
94 -- fed to the renamer.
95 data HsGroup id
96   = HsGroup {
97         hs_valds  :: HsValBinds id,
98         hs_tyclds :: [LTyClDecl id],
99         hs_instds :: [LInstDecl id],
100
101         hs_fixds  :: [LFixitySig id],
102                 -- Snaffled out of both top-level fixity signatures,
103                 -- and those in class declarations
104
105         hs_defds  :: [LDefaultDecl id],
106         hs_fords  :: [LForeignDecl id],
107         hs_depds  :: [LDeprecDecl id],
108         hs_ruleds :: [LRuleDecl id]
109   }
110
111 emptyGroup, emptyRdrGroup, emptyRnGroup :: HsGroup a
112 emptyRdrGroup = emptyGroup { hs_valds = emptyValBindsIn }
113 emptyRnGroup  = emptyGroup { hs_valds = emptyValBindsOut }
114
115 emptyGroup = HsGroup { hs_tyclds = [], hs_instds = [],
116                        hs_fixds = [], hs_defds = [], hs_fords = [], 
117                        hs_depds = [], hs_ruleds = [],
118                        hs_valds = error "emptyGroup hs_valds: Can't happen" }
119
120 appendGroups :: HsGroup a -> HsGroup a -> HsGroup a
121 appendGroups 
122     HsGroup { 
123         hs_valds  = val_groups1,
124         hs_tyclds = tyclds1, 
125         hs_instds = instds1,
126         hs_fixds  = fixds1, 
127         hs_defds  = defds1,
128         hs_fords  = fords1, 
129         hs_depds  = depds1,
130         hs_ruleds = rulds1 }
131     HsGroup { 
132         hs_valds  = val_groups2,
133         hs_tyclds = tyclds2, 
134         hs_instds = instds2,
135         hs_fixds  = fixds2, 
136         hs_defds  = defds2,
137         hs_fords  = fords2, 
138         hs_depds  = depds2,
139         hs_ruleds = rulds2 }
140   = 
141     HsGroup { 
142         hs_valds  = val_groups1 `plusHsValBinds` val_groups2,
143         hs_tyclds = tyclds1 ++ tyclds2, 
144         hs_instds = instds1 ++ instds2,
145         hs_fixds  = fixds1 ++ fixds2, 
146         hs_defds  = defds1 ++ defds2,
147         hs_fords  = fords1 ++ fords2, 
148         hs_depds  = depds1 ++ depds2,
149         hs_ruleds = rulds1 ++ rulds2 }
150 \end{code}
151
152 \begin{code}
153 instance OutputableBndr name => Outputable (HsDecl name) where
154     ppr (TyClD dcl)  = ppr dcl
155     ppr (ValD binds) = ppr binds
156     ppr (DefD def)   = ppr def
157     ppr (InstD inst) = ppr inst
158     ppr (ForD fd)    = ppr fd
159     ppr (SigD sd)    = ppr sd
160     ppr (RuleD rd)   = ppr rd
161     ppr (DeprecD dd) = ppr dd
162     ppr (SpliceD dd) = ppr dd
163
164 instance OutputableBndr name => Outputable (HsGroup name) where
165     ppr (HsGroup { hs_valds  = val_decls,
166                    hs_tyclds = tycl_decls,
167                    hs_instds = inst_decls,
168                    hs_fixds  = fix_decls,
169                    hs_depds  = deprec_decls,
170                    hs_fords  = foreign_decls,
171                    hs_defds  = default_decls,
172                    hs_ruleds = rule_decls })
173         = vcat [ppr_ds fix_decls, ppr_ds default_decls, 
174                 ppr_ds deprec_decls, ppr_ds rule_decls,
175                 ppr val_decls,
176                 ppr_ds tycl_decls, ppr_ds inst_decls,
177                 ppr_ds foreign_decls]
178         where
179           ppr_ds [] = empty
180           ppr_ds ds = text "" $$ vcat (map ppr ds)
181
182 data SpliceDecl id = SpliceDecl (Located (HsExpr id))   -- Top level splice
183
184 instance OutputableBndr name => Outputable (SpliceDecl name) where
185    ppr (SpliceDecl e) = ptext SLIT("$") <> parens (pprExpr (unLoc e))
186 \end{code}
187
188
189 %************************************************************************
190 %*                                                                      *
191 \subsection[TyDecl]{@data@, @newtype@ or @type@ (synonym) type declaration}
192 %*                                                                      *
193 %************************************************************************
194
195                 --------------------------------
196                         THE NAMING STORY
197                 --------------------------------
198
199 Here is the story about the implicit names that go with type, class,
200 and instance decls.  It's a bit tricky, so pay attention!
201
202 "Implicit" (or "system") binders
203 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
204   Each data type decl defines 
205         a worker name for each constructor
206         to-T and from-T convertors
207   Each class decl defines
208         a tycon for the class
209         a data constructor for that tycon
210         the worker for that constructor
211         a selector for each superclass
212
213 All have occurrence names that are derived uniquely from their parent
214 declaration.
215
216 None of these get separate definitions in an interface file; they are
217 fully defined by the data or class decl.  But they may *occur* in
218 interface files, of course.  Any such occurrence must haul in the
219 relevant type or class decl.
220
221 Plan of attack:
222  - Ensure they "point to" the parent data/class decl 
223    when loading that decl from an interface file
224    (See RnHiFiles.getSysBinders)
225
226  - When typechecking the decl, we build the implicit TyCons and Ids.
227    When doing so we look them up in the name cache (RnEnv.lookupSysName),
228    to ensure correct module and provenance is set
229
230 These are the two places that we have to conjure up the magic derived
231 names.  (The actual magic is in OccName.mkWorkerOcc, etc.)
232
233 Default methods
234 ~~~~~~~~~~~~~~~
235  - Occurrence name is derived uniquely from the method name
236    E.g. $dmmax
237
238  - If there is a default method name at all, it's recorded in
239    the ClassOpSig (in HsBinds), in the DefMeth field.
240    (DefMeth is defined in Class.lhs)
241
242 Source-code class decls and interface-code class decls are treated subtly
243 differently, which has given me a great deal of confusion over the years.
244 Here's the deal.  (We distinguish the two cases because source-code decls
245 have (Just binds) in the tcdMeths field, whereas interface decls have Nothing.
246
247 In *source-code* class declarations:
248
249  - When parsing, every ClassOpSig gets a DefMeth with a suitable RdrName
250    This is done by RdrHsSyn.mkClassOpSigDM
251
252  - The renamer renames it to a Name
253
254  - During typechecking, we generate a binding for each $dm for 
255    which there's a programmer-supplied default method:
256         class Foo a where
257           op1 :: <type>
258           op2 :: <type>
259           op1 = ...
260    We generate a binding for $dmop1 but not for $dmop2.
261    The Class for Foo has a NoDefMeth for op2 and a DefMeth for op1.
262    The Name for $dmop2 is simply discarded.
263
264 In *interface-file* class declarations:
265   - When parsing, we see if there's an explicit programmer-supplied default method
266     because there's an '=' sign to indicate it:
267         class Foo a where
268           op1 = :: <type>       -- NB the '='
269           op2   :: <type>
270     We use this info to generate a DefMeth with a suitable RdrName for op1,
271     and a NoDefMeth for op2
272   - The interface file has a separate definition for $dmop1, with unfolding etc.
273   - The renamer renames it to a Name.
274   - The renamer treats $dmop1 as a free variable of the declaration, so that
275     the binding for $dmop1 will be sucked in.  (See RnHsSyn.tyClDeclFVs)  
276     This doesn't happen for source code class decls, because they *bind* the default method.
277
278 Dictionary functions
279 ~~~~~~~~~~~~~~~~~~~~
280 Each instance declaration gives rise to one dictionary function binding.
281
282 The type checker makes up new source-code instance declarations
283 (e.g. from 'deriving' or generic default methods --- see
284 TcInstDcls.tcInstDecls1).  So we can't generate the names for
285 dictionary functions in advance (we don't know how many we need).
286
287 On the other hand for interface-file instance declarations, the decl
288 specifies the name of the dictionary function, and it has a binding elsewhere
289 in the interface file:
290         instance {Eq Int} = dEqInt
291         dEqInt :: {Eq Int} <pragma info>
292
293 So again we treat source code and interface file code slightly differently.
294
295 Source code:
296   - Source code instance decls have a Nothing in the (Maybe name) field
297     (see data InstDecl below)
298
299   - The typechecker makes up a Local name for the dict fun for any source-code
300     instance decl, whether it comes from a source-code instance decl, or whether
301     the instance decl is derived from some other construct (e.g. 'deriving').
302
303   - The occurrence name it chooses is derived from the instance decl (just for 
304     documentation really) --- e.g. dNumInt.  Two dict funs may share a common
305     occurrence name, but will have different uniques.  E.g.
306         instance Foo [Int]  where ...
307         instance Foo [Bool] where ...
308     These might both be dFooList
309
310   - The CoreTidy phase externalises the name, and ensures the occurrence name is
311     unique (this isn't special to dict funs).  So we'd get dFooList and dFooList1.
312
313   - We can take this relaxed approach (changing the occurrence name later) 
314     because dict fun Ids are not captured in a TyCon or Class (unlike default
315     methods, say).  Instead, they are kept separately in the InstEnv.  This
316     makes it easy to adjust them after compiling a module.  (Once we've finished
317     compiling that module, they don't change any more.)
318
319
320 Interface file code:
321   - The instance decl gives the dict fun name, so the InstDecl has a (Just name)
322     in the (Maybe name) field.
323
324   - RnHsSyn.instDeclFVs treats the dict fun name as free in the decl, so that we
325     suck in the dfun binding
326
327
328 \begin{code}
329 -- TyClDecls are precisely the kind of declarations that can 
330 -- appear in interface files; or (internally) in GHC's interface
331 -- for a module.  That's why (despite the misnomer) IfaceSig and ForeignType
332 -- are both in TyClDecl
333
334 -- Representation of indexed types
335 -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
336 -- Kind signatures of indexed types come in two flavours:
337 --
338 -- * kind signatures for type functions: variant `TyFunction' and
339 --
340 -- * kind signatures for indexed data types and newtypes : variant `TyData'
341 --   iff a kind is present in `tcdKindSig' and there are no constructors in
342 --   `tcdCons'.
343 --
344 -- Indexed types are represented by 'TyData' and 'TySynonym' using the field
345 -- 'tcdTyPats::Maybe [LHsType name]', with the following meaning:
346 --
347 --   * If it is 'Nothing', we have a *vanilla* data type declaration or type
348 --     synonym declaration and 'tcdVars' contains the type parameters of the
349 --     type constructor.
350 --
351 --   * If it is 'Just pats', we have the definition of an indexed type Then,
352 --     'pats' are type patterns for the type-indexes of the type constructor
353 --     and 'tcdVars' are the variables in those patterns.  Hence, the arity of
354 --     the indexed type (ie, the number of indexes) is 'length tcdTyPats' and
355 --     *not* 'length tcdVars'.
356 --
357 -- In both cases, 'tcdVars' collects all variables we need to quantify over.
358
359 type LTyClDecl name = Located (TyClDecl name)
360
361 data TyClDecl name
362   = ForeignType { 
363                 tcdLName    :: Located name,
364                 tcdExtName  :: Maybe FastString,
365                 tcdFoType   :: FoType
366   }
367
368   | TyData {    tcdND     :: NewOrData,
369                 tcdCtxt   :: LHsContext name,           -- Context
370                 tcdLName  :: Located name,              -- Type constructor
371                 tcdTyVars :: [LHsTyVarBndr name],       -- Type variables
372                 tcdTyPats :: Maybe [LHsType name],      -- Type patterns
373                 tcdKindSig:: Maybe Kind,                -- Optional kind sig; 
374                                                         -- (only for the 
375                                                         -- 'where' form and
376                                                         -- indexed type sigs)
377
378                 tcdCons   :: [LConDecl name],           -- Data constructors
379                         -- For data T a = T1 | T2 a          the LConDecls all have ResTyH98
380                         -- For data T a where { T1 :: T a }  the LConDecls all have ResTyGADT
381
382                 tcdDerivs :: Maybe [LHsType name]
383                         -- Derivings; Nothing => not specified
384                         --            Just [] => derive exactly what is asked
385                         -- These "types" must be of form
386                         --      forall ab. C ty1 ty2
387                         -- Typically the foralls and ty args are empty, but they
388                         -- are non-empty for the newtype-deriving case
389     }
390
391   | TyFunction {tcdLName  :: Located name,              -- type constructor
392                 tcdTyVars :: [LHsTyVarBndr name],       -- type variables
393                 tcdIso    :: Bool,                      -- injective type?
394                 tcdKind   :: Kind                       -- result kind
395     }
396
397   | TySynonym { tcdLName  :: Located name,              -- type constructor
398                 tcdTyVars :: [LHsTyVarBndr name],       -- type variables
399                 tcdTyPats :: Maybe [LHsType name],      -- Type patterns
400                                                         -- 'Nothing' => vanilla
401                                                         --   type synonym
402                 tcdSynRhs :: LHsType name               -- synonym expansion
403     }
404
405   | ClassDecl { tcdCtxt    :: LHsContext name,          -- Context...
406                 tcdLName   :: Located name,             -- Name of the class
407                 tcdTyVars  :: [LHsTyVarBndr name],      -- Class type variables
408                 tcdFDs     :: [Located (FunDep name)],  -- Functional deps
409                 tcdSigs    :: [LSig name],              -- Methods' signatures
410                 tcdMeths   :: LHsBinds name,            -- Default methods
411                 tcdATs     :: [LTyClDecl name]          -- Associated types; ie
412                                                         --   only 'TyData',
413                                                         --   'TyFunction',
414                                                         --   and 'TySynonym'
415     }
416
417 data NewOrData
418   = NewType     -- "newtype Blah ..."
419   | DataType    -- "data Blah ..."
420   deriving( Eq )        -- Needed because Demand derives Eq
421 \end{code}
422
423 Simple classifiers
424
425 \begin{code}
426 isTFunDecl, isDataDecl, isSynDecl, isClassDecl, isKindSigDecl, isIdxTyDecl ::
427   TyClDecl name -> Bool
428
429 -- type function kind signature
430 isTFunDecl (TyFunction {}) = True
431 isTFunDecl other           = False
432
433 -- vanilla Haskell type synonym
434 isSynDecl (TySynonym {tcdTyPats = Nothing}) = True
435 isSynDecl other                             = False
436
437 -- type equation (of a type function)
438 isTEqnDecl (TySynonym {tcdTyPats = Just _}) = True
439 isTEqnDecl other                            = False
440
441 isDataDecl (TyData {}) = True
442 isDataDecl other       = False
443
444 isClassDecl (ClassDecl {}) = True
445 isClassDecl other          = False
446
447 -- kind signature (for an indexed type)
448 isKindSigDecl (TyFunction {}                   ) = True
449 isKindSigDecl (TyData     {tcdKindSig = Just _,
450                            tcdCons    = []    }) = True
451 isKindSigDecl other                              = False
452
453 -- definition of an instance of an indexed type
454 isIdxTyDecl tydecl
455    | isSynDecl tydecl || isDataDecl tydecl = isJust (tcdTyPats tydecl)
456    | otherwise                             = False
457 \end{code}
458
459 Dealing with names
460
461 \begin{code}
462 tcdName :: TyClDecl name -> name
463 tcdName decl = unLoc (tcdLName decl)
464
465 tyClDeclNames :: Eq name => TyClDecl name -> [Located name]
466 -- Returns all the *binding* names of the decl, along with their SrcLocs
467 -- The first one is guaranteed to be the name of the decl
468 -- For record fields, the first one counts as the SrcLoc
469 -- We use the equality to filter out duplicate field names
470
471 tyClDeclNames (TyFunction  {tcdLName = name})    = [name]
472 tyClDeclNames (TySynonym   {tcdLName = name})    = [name]
473 tyClDeclNames (ForeignType {tcdLName = name})    = [name]
474
475 tyClDeclNames (ClassDecl {tcdLName = cls_name, tcdSigs = sigs, tcdATs = ats})
476   = cls_name : 
477     concatMap (tyClDeclNames . unLoc) ats ++ [n | L _ (TypeSig n _) <- sigs]
478
479 tyClDeclNames (TyData {tcdLName = tc_name, tcdCons = cons})
480   = tc_name : conDeclsNames (map unLoc cons)
481
482 tyClDeclTyVars (TyFunction  {tcdTyVars = tvs}) = tvs
483 tyClDeclTyVars (TySynonym   {tcdTyVars = tvs}) = tvs
484 tyClDeclTyVars (TyData      {tcdTyVars = tvs}) = tvs
485 tyClDeclTyVars (ClassDecl   {tcdTyVars = tvs}) = tvs
486 tyClDeclTyVars (ForeignType {})                = []
487 \end{code}
488
489 \begin{code}
490 countTyClDecls :: [TyClDecl name] -> (Int, Int, Int, Int, Int, Int)
491         -- class, synonym decls, type function signatures,
492         -- type function equations, data, newtype
493 countTyClDecls decls 
494  = (count isClassDecl     decls,
495     count isSynDecl       decls,
496     count isTFunDecl      decls,
497     count isTEqnDecl      decls,
498     count isDataTy        decls,
499     count isNewTy         decls) 
500  where
501    isDataTy TyData{tcdND=DataType} = True
502    isDataTy _                      = False
503    
504    isNewTy TyData{tcdND=NewType} = True
505    isNewTy _                     = False
506 \end{code}
507
508 \begin{code}
509 instance OutputableBndr name
510               => Outputable (TyClDecl name) where
511
512     ppr (ForeignType {tcdLName = ltycon})
513         = hsep [ptext SLIT("foreign import type dotnet"), ppr ltycon]
514
515     ppr (TyFunction {tcdLName = ltycon, tcdTyVars = tyvars, tcdIso = iso, 
516                      tcdKind = kind})
517       = typeMaybeIso <+> pp_decl_head [] ltycon tyvars Nothing <+> 
518         dcolon <+> pprKind kind
519         where
520           typeMaybeIso = if iso 
521                          then ptext SLIT("type iso") 
522                          else ptext SLIT("type")
523
524     ppr (TySynonym {tcdLName = ltycon, tcdTyVars = tyvars, tcdTyPats = typats,
525                     tcdSynRhs = mono_ty})
526       = hang (ptext SLIT("type") <+> pp_decl_head [] ltycon tyvars typats <+> 
527               equals)
528              4 (ppr mono_ty)
529
530     ppr (TyData {tcdND = new_or_data, tcdCtxt = context, tcdLName = ltycon,
531                  tcdTyVars = tyvars, tcdTyPats = typats, tcdKindSig = mb_sig, 
532                  tcdCons = condecls, tcdDerivs = derivings})
533       = pp_tydecl (ppr new_or_data <+> 
534                    pp_decl_head (unLoc context) ltycon tyvars typats <+> 
535                    ppr_sig mb_sig)
536                   (pp_condecls condecls)
537                   derivings
538       where
539         ppr_sig Nothing = empty
540         ppr_sig (Just kind) = dcolon <+> pprKind kind
541
542     ppr (ClassDecl {tcdCtxt = context, tcdLName = lclas, tcdTyVars = tyvars, 
543                     tcdFDs = fds, 
544                     tcdSigs = sigs, tcdMeths = methods, tcdATs = ats})
545       | null sigs && null ats  -- No "where" part
546       = top_matter
547
548       | otherwise       -- Laid out
549       = sep [hsep [top_matter, ptext SLIT("where {")],
550              nest 4 (sep [ sep (map ppr_semi ats)
551                          , sep (map ppr_semi sigs)
552                          , pprLHsBinds methods
553                          , char '}'])]
554       where
555         top_matter    =     ptext SLIT("class") 
556                         <+> pp_decl_head (unLoc context) lclas tyvars Nothing
557                         <+> pprFundeps (map unLoc fds)
558         ppr_semi decl = ppr decl <> semi
559
560 pp_decl_head :: OutputableBndr name
561    => HsContext name
562    -> Located name
563    -> [LHsTyVarBndr name]
564    -> Maybe [LHsType name]
565    -> SDoc
566 pp_decl_head context thing tyvars Nothing       -- no explicit type patterns
567   = hsep [pprHsContext context, ppr thing, interppSP tyvars]
568 pp_decl_head context thing _      (Just typats) -- explicit type patterns
569   = hsep [ pprHsContext context, ppr thing
570          , hsep (map (pprParendHsType.unLoc) typats)]
571
572 pp_condecls cs@(L _ ConDecl{ con_res = ResTyGADT _ } : _) -- In GADT syntax
573   = hang (ptext SLIT("where")) 2 (vcat (map ppr cs))
574 pp_condecls cs                    -- In H98 syntax
575   = equals <+> sep (punctuate (ptext SLIT(" |")) (map ppr cs))
576
577 pp_tydecl pp_head pp_decl_rhs derivings
578   = hang pp_head 4 (sep [
579         pp_decl_rhs,
580         case derivings of
581           Nothing          -> empty
582           Just ds          -> hsep [ptext SLIT("deriving"), parens (interpp'SP ds)]
583     ])
584
585 instance Outputable NewOrData where
586   ppr NewType  = ptext SLIT("newtype")
587   ppr DataType = ptext SLIT("data")
588 \end{code}
589
590
591 %************************************************************************
592 %*                                                                      *
593 \subsection[ConDecl]{A data-constructor declaration}
594 %*                                                                      *
595 %************************************************************************
596
597 \begin{code}
598 type LConDecl name = Located (ConDecl name)
599
600 -- data T b = forall a. Eq a => MkT a b
601 --   MkT :: forall b a. Eq a => MkT a b
602
603 -- data T b where
604 --      MkT1 :: Int -> T Int
605
606 -- data T = Int `MkT` Int
607 --        | MkT2
608
609 -- data T a where
610 --      Int `MkT` Int :: T Int
611
612 data ConDecl name
613   = ConDecl
614     { con_name      :: Located name         -- Constructor name; this is used for the
615                                             -- DataCon itself, and for the user-callable wrapper Id
616
617     , con_explicit  :: HsExplicitForAll     -- Is there an user-written forall? (cf. HStypes.HsForAllTy)
618
619     , con_qvars     :: [LHsTyVarBndr name]  -- ResTyH98: the constructor's existential type variables
620                                             -- ResTyGADT:    all the constructor's quantified type variables
621
622     , con_cxt       :: LHsContext name      -- The context.  This *does not* include the
623                                             -- "stupid theta" which lives only in the TyData decl
624
625     , con_details   :: HsConDetails name (LBangType name)       -- The main payload
626
627     , con_res       :: ResType name         -- Result type of the constructor
628     }
629
630 data ResType name
631    = ResTyH98           -- Constructor was declared using Haskell 98 syntax
632    | ResTyGADT (LHsType name)   -- Constructor was declared using GADT-style syntax,
633                                 --      and here is its result type
634 \end{code}
635
636 \begin{code}
637 conDeclsNames :: Eq name => [ConDecl name] -> [Located name]
638   -- See tyClDeclNames for what this does
639   -- The function is boringly complicated because of the records
640   -- And since we only have equality, we have to be a little careful
641 conDeclsNames cons
642   = snd (foldl do_one ([], []) cons)
643   where
644     do_one (flds_seen, acc) (ConDecl { con_name = lname, con_details = RecCon flds })
645         = (map unLoc new_flds ++ flds_seen, lname : [f | f <- new_flds] ++ acc)
646         where
647           new_flds = [ f | (f,_) <- flds, not (unLoc f `elem` flds_seen) ]
648
649     do_one (flds_seen, acc) c
650         = (flds_seen, (con_name c):acc)
651
652 conDetailsTys details = map getBangType (hsConArgs details)
653 \end{code}
654   
655
656 \begin{code}
657 instance (OutputableBndr name) => Outputable (ConDecl name) where
658     ppr = pprConDecl
659
660 pprConDecl (ConDecl con expl tvs cxt details ResTyH98)
661   = sep [pprHsForAll expl tvs cxt, ppr_details con details]
662   where
663     ppr_details con (InfixCon t1 t2) = hsep [ppr t1, pprHsVar con, ppr t2]
664     ppr_details con (PrefixCon tys)  = hsep (pprHsVar con : map ppr tys)
665     ppr_details con (RecCon fields)  = ppr con <+> ppr_fields fields
666
667 pprConDecl (ConDecl con expl tvs cxt (PrefixCon arg_tys) (ResTyGADT res_ty))
668   = ppr con <+> dcolon <+> 
669     sep [pprHsForAll expl tvs cxt, ppr (foldr mk_fun_ty res_ty arg_tys)]
670   where
671     mk_fun_ty a b = noLoc (HsFunTy a b)
672 pprConDecl (ConDecl con expl tvs cxt (RecCon fields) (ResTyGADT res_ty))
673   = sep [pprHsForAll expl tvs cxt, ppr con <+> ppr fields <+> dcolon <+> ppr res_ty]
674
675 ppr_fields fields = braces (sep (punctuate comma (map ppr_field fields)))
676 ppr_field (n, ty) = ppr n <+> dcolon <+> ppr ty
677 \end{code}
678
679 %************************************************************************
680 %*                                                                      *
681 \subsection[InstDecl]{An instance declaration
682 %*                                                                      *
683 %************************************************************************
684
685 \begin{code}
686 type LInstDecl name = Located (InstDecl name)
687
688 data InstDecl name
689   = InstDecl    (LHsType name)  -- Context => Class Instance-type
690                                 -- Using a polytype means that the renamer conveniently
691                                 -- figures out the quantified type variables for us.
692                 (LHsBinds name)
693                 [LSig name]     -- User-supplied pragmatic info
694                 [LTyClDecl name]-- Associated types (ie, 'TyData' and
695                                 -- 'TySynonym' only)
696
697 instance (OutputableBndr name) => Outputable (InstDecl name) where
698
699     ppr (InstDecl inst_ty binds uprags ats)
700       = vcat [hsep [ptext SLIT("instance"), ppr inst_ty, ptext SLIT("where")],
701               nest 4 (ppr ats),
702               nest 4 (ppr uprags),
703               nest 4 (pprLHsBinds binds) ]
704
705 -- Extract the declarations of associated types from an instance
706 --
707 instDeclATs :: InstDecl name -> [LTyClDecl name]
708 instDeclATs (InstDecl _ _ _ ats) = ats
709 \end{code}
710
711 %************************************************************************
712 %*                                                                      *
713 \subsection[DefaultDecl]{A @default@ declaration}
714 %*                                                                      *
715 %************************************************************************
716
717 There can only be one default declaration per module, but it is hard
718 for the parser to check that; we pass them all through in the abstract
719 syntax, and that restriction must be checked in the front end.
720
721 \begin{code}
722 type LDefaultDecl name = Located (DefaultDecl name)
723
724 data DefaultDecl name
725   = DefaultDecl [LHsType name]
726
727 instance (OutputableBndr name)
728               => Outputable (DefaultDecl name) where
729
730     ppr (DefaultDecl tys)
731       = ptext SLIT("default") <+> parens (interpp'SP tys)
732 \end{code}
733
734 %************************************************************************
735 %*                                                                      *
736 \subsection{Foreign function interface declaration}
737 %*                                                                      *
738 %************************************************************************
739
740 \begin{code}
741
742 -- foreign declarations are distinguished as to whether they define or use a
743 -- Haskell name
744 --
745 --  * the Boolean value indicates whether the pre-standard deprecated syntax
746 --   has been used
747 --
748 type LForeignDecl name = Located (ForeignDecl name)
749
750 data ForeignDecl name
751   = ForeignImport (Located name) (LHsType name) ForeignImport  -- defines name
752   | ForeignExport (Located name) (LHsType name) ForeignExport  -- uses name
753
754 -- Specification Of an imported external entity in dependence on the calling
755 -- convention 
756 --
757 data ForeignImport = -- import of a C entity
758                      --
759                      --  * the two strings specifying a header file or library
760                      --   may be empty, which indicates the absence of a
761                      --   header or object specification (both are not used
762                      --   in the case of `CWrapper' and when `CFunction'
763                      --   has a dynamic target)
764                      --
765                      --  * the calling convention is irrelevant for code
766                      --   generation in the case of `CLabel', but is needed
767                      --   for pretty printing 
768                      --
769                      --  * `Safety' is irrelevant for `CLabel' and `CWrapper'
770                      --
771                      CImport  CCallConv       -- ccall or stdcall
772                               Safety          -- safe or unsafe
773                               FastString      -- name of C header
774                               FastString      -- name of library object
775                               CImportSpec     -- details of the C entity
776
777                      -- import of a .NET function
778                      --
779                    | DNImport DNCallSpec
780
781 -- details of an external C entity
782 --
783 data CImportSpec = CLabel    CLabelString     -- import address of a C label
784                  | CFunction CCallTarget      -- static or dynamic function
785                  | CWrapper                   -- wrapper to expose closures
786                                               -- (former f.e.d.)
787
788 -- specification of an externally exported entity in dependence on the calling
789 -- convention
790 --
791 data ForeignExport = CExport  CExportSpec    -- contains the calling convention
792                    | DNExport                -- presently unused
793
794 -- abstract type imported from .NET
795 --
796 data FoType = DNType            -- In due course we'll add subtype stuff
797             deriving (Eq)       -- Used for equality instance for TyClDecl
798
799
800 -- pretty printing of foreign declarations
801 --
802
803 instance OutputableBndr name => Outputable (ForeignDecl name) where
804   ppr (ForeignImport n ty fimport) =
805     ptext SLIT("foreign import") <+> ppr fimport <+> 
806     ppr n <+> dcolon <+> ppr ty
807   ppr (ForeignExport n ty fexport) =
808     ptext SLIT("foreign export") <+> ppr fexport <+> 
809     ppr n <+> dcolon <+> ppr ty
810
811 instance Outputable ForeignImport where
812   ppr (DNImport                         spec) = 
813     ptext SLIT("dotnet") <+> ppr spec
814   ppr (CImport  cconv safety header lib spec) =
815     ppr cconv <+> ppr safety <+> 
816     char '"' <> pprCEntity header lib spec <> char '"'
817     where
818       pprCEntity header lib (CLabel lbl) = 
819         ptext SLIT("static") <+> ftext header <+> char '&' <>
820         pprLib lib <> ppr lbl
821       pprCEntity header lib (CFunction (StaticTarget lbl)) = 
822         ptext SLIT("static") <+> ftext header <+> char '&' <>
823         pprLib lib <> ppr lbl
824       pprCEntity header lib (CFunction (DynamicTarget)) = 
825         ptext SLIT("dynamic")
826       pprCEntity _      _   (CWrapper) = ptext SLIT("wrapper")
827       --
828       pprLib lib | nullFS lib = empty
829                  | otherwise  = char '[' <> ppr lib <> char ']'
830
831 instance Outputable ForeignExport where
832   ppr (CExport  (CExportStatic lbl cconv)) = 
833     ppr cconv <+> char '"' <> ppr lbl <> char '"'
834   ppr (DNExport                          ) = 
835     ptext SLIT("dotnet") <+> ptext SLIT("\"<unused>\"")
836
837 instance Outputable FoType where
838   ppr DNType = ptext SLIT("type dotnet")
839 \end{code}
840
841
842 %************************************************************************
843 %*                                                                      *
844 \subsection{Transformation rules}
845 %*                                                                      *
846 %************************************************************************
847
848 \begin{code}
849 type LRuleDecl name = Located (RuleDecl name)
850
851 data RuleDecl name
852   = HsRule                      -- Source rule
853         RuleName                -- Rule name
854         Activation
855         [RuleBndr name]         -- Forall'd vars; after typechecking this includes tyvars
856         (Located (HsExpr name)) -- LHS
857         NameSet                 -- Free-vars from the LHS
858         (Located (HsExpr name)) -- RHS
859         NameSet                 -- Free-vars from the RHS
860
861 data RuleBndr name
862   = RuleBndr (Located name)
863   | RuleBndrSig (Located name) (LHsType name)
864
865 collectRuleBndrSigTys :: [RuleBndr name] -> [LHsType name]
866 collectRuleBndrSigTys bndrs = [ty | RuleBndrSig _ ty <- bndrs]
867
868 instance OutputableBndr name => Outputable (RuleDecl name) where
869   ppr (HsRule name act ns lhs fv_lhs rhs fv_rhs)
870         = sep [text "{-# RULES" <+> doubleQuotes (ftext name) <+> ppr act,
871                nest 4 (pp_forall <+> pprExpr (unLoc lhs)), 
872                nest 4 (equals <+> pprExpr (unLoc rhs) <+> text "#-}") ]
873         where
874           pp_forall | null ns   = empty
875                     | otherwise = text "forall" <+> fsep (map ppr ns) <> dot
876
877 instance OutputableBndr name => Outputable (RuleBndr name) where
878    ppr (RuleBndr name) = ppr name
879    ppr (RuleBndrSig name ty) = ppr name <> dcolon <> ppr ty
880 \end{code}
881
882
883 %************************************************************************
884 %*                                                                      *
885 \subsection[DeprecDecl]{Deprecations}
886 %*                                                                      *
887 %************************************************************************
888
889 We use exported entities for things to deprecate.
890
891 \begin{code}
892 type LDeprecDecl name = Located (DeprecDecl name)
893
894 data DeprecDecl name = Deprecation name DeprecTxt
895
896 instance OutputableBndr name => Outputable (DeprecDecl name) where
897     ppr (Deprecation thing txt)
898       = hsep [text "{-# DEPRECATED", ppr thing, doubleQuotes (ppr txt), text "#-}"]
899 \end{code}