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