More import tidying and fixing the stage 2 build
[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 -- TyClDecls are precisely the kind of declarations that can 
348 -- appear in interface files; or (internally) in GHC's interface
349 -- for a module.  That's why (despite the misnomer) IfaceSig and ForeignType
350 -- are both in TyClDecl
351
352 -- Representation of indexed types
353 -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
354 -- Kind signatures of indexed types come in two flavours:
355 --
356 -- * kind signatures for type functions: variant `TyFunction' and
357 --
358 -- * kind signatures for indexed data types and newtypes : variant `TyData'
359 --   iff a kind is present in `tcdKindSig' and there are no constructors in
360 --   `tcdCons'.
361 --
362 -- Indexed types are represented by 'TyData' and 'TySynonym' using the field
363 -- 'tcdTyPats::Maybe [LHsType name]', with the following meaning:
364 --
365 --   * If it is 'Nothing', we have a *vanilla* data type declaration or type
366 --     synonym declaration and 'tcdVars' contains the type parameters of the
367 --     type constructor.
368 --
369 --   * If it is 'Just pats', we have the definition of an indexed type Then,
370 --     'pats' are type patterns for the type-indexes of the type constructor
371 --     and 'tcdVars' are the variables in those patterns.  Hence, the arity of
372 --     the indexed type (ie, the number of indexes) is 'length tcdTyPats' and
373 --     *not* 'length tcdVars'.
374 --
375 -- In both cases, 'tcdVars' collects all variables we need to quantify over.
376
377 type LTyClDecl name = Located (TyClDecl name)
378
379 data TyClDecl name
380   = ForeignType { 
381                 tcdLName    :: Located name,
382                 tcdExtName  :: Maybe FastString,
383                 tcdFoType   :: FoType
384   }
385
386   | TyData {    tcdND     :: NewOrData,
387                 tcdCtxt   :: LHsContext name,           -- Context
388                 tcdLName  :: Located name,              -- Type constructor
389                 tcdTyVars :: [LHsTyVarBndr name],       -- Type variables
390                 tcdTyPats :: Maybe [LHsType name],      -- Type patterns
391                 tcdKindSig:: Maybe Kind,                -- Optional kind sig; 
392                                                         -- (only for the 
393                                                         -- 'where' form and
394                                                         -- indexed type sigs)
395
396                 tcdCons   :: [LConDecl name],           -- Data constructors
397                         -- For data T a = T1 | T2 a          the LConDecls all have ResTyH98
398                         -- For data T a where { T1 :: T a }  the LConDecls all have ResTyGADT
399
400                 tcdDerivs :: Maybe [LHsType name]
401                         -- Derivings; Nothing => not specified
402                         --            Just [] => derive exactly what is asked
403                         -- These "types" must be of form
404                         --      forall ab. C ty1 ty2
405                         -- Typically the foralls and ty args are empty, but they
406                         -- are non-empty for the newtype-deriving case
407     }
408
409   | TyFunction {tcdLName  :: Located name,              -- type constructor
410                 tcdTyVars :: [LHsTyVarBndr name],       -- type variables
411                 tcdIso    :: Bool,                      -- injective type?
412                 tcdKind   :: Kind                       -- result kind
413     }
414
415   | TySynonym { tcdLName  :: Located name,              -- type constructor
416                 tcdTyVars :: [LHsTyVarBndr name],       -- type variables
417                 tcdTyPats :: Maybe [LHsType name],      -- Type patterns
418                                                         -- 'Nothing' => vanilla
419                                                         --   type synonym
420                 tcdSynRhs :: LHsType name               -- synonym expansion
421     }
422
423   | ClassDecl { tcdCtxt    :: LHsContext name,          -- Context...
424                 tcdLName   :: Located name,             -- Name of the class
425                 tcdTyVars  :: [LHsTyVarBndr name],      -- Class type variables
426                 tcdFDs     :: [Located (FunDep name)],  -- Functional deps
427                 tcdSigs    :: [LSig name],              -- Methods' signatures
428                 tcdMeths   :: LHsBinds name,            -- Default methods
429                 tcdATs     :: [LTyClDecl name],         -- Associated types; ie
430                                                         --   only 'TyData',
431                                                         --   'TyFunction',
432                                                         --   and 'TySynonym'
433                 tcdDocs    :: [DocEntity name]          -- Haddock docs
434     }
435
436 data NewOrData
437   = NewType     -- "newtype Blah ..."
438   | DataType    -- "data Blah ..."
439   deriving( Eq )        -- Needed because Demand derives Eq
440 \end{code}
441
442 Simple classifiers
443
444 \begin{code}
445 isTFunDecl, isDataDecl, isSynDecl, isClassDecl, isKindSigDecl, isIdxTyDecl ::
446   TyClDecl name -> Bool
447
448 -- type function kind signature
449 isTFunDecl (TyFunction {}) = True
450 isTFunDecl other           = False
451
452 -- vanilla Haskell type synonym
453 isSynDecl (TySynonym {tcdTyPats = Nothing}) = True
454 isSynDecl other                             = False
455
456 -- type equation (of a type function)
457 isTEqnDecl (TySynonym {tcdTyPats = Just _}) = True
458 isTEqnDecl other                            = False
459
460 isDataDecl (TyData {}) = True
461 isDataDecl other       = False
462
463 isClassDecl (ClassDecl {}) = True
464 isClassDecl other          = False
465
466 -- kind signature (for an indexed type)
467 isKindSigDecl (TyFunction {}                   ) = True
468 isKindSigDecl (TyData     {tcdKindSig = Just _,
469                            tcdCons    = []    }) = True
470 isKindSigDecl other                              = False
471
472 -- definition of an instance of an indexed type
473 isIdxTyDecl tydecl
474    | isTEqnDecl tydecl = True
475    | isDataDecl tydecl = isJust (tcdTyPats tydecl)
476    | otherwise         = False
477 \end{code}
478
479 Dealing with names
480
481 \begin{code}
482 tcdName :: TyClDecl name -> name
483 tcdName decl = unLoc (tcdLName decl)
484
485 tyClDeclNames :: Eq name => TyClDecl name -> [Located name]
486 -- Returns all the *binding* names of the decl, along with their SrcLocs
487 -- The first one is guaranteed to be the name of the decl
488 -- For record fields, the first one counts as the SrcLoc
489 -- We use the equality to filter out duplicate field names
490
491 tyClDeclNames (TyFunction  {tcdLName = name})    = [name]
492 tyClDeclNames (TySynonym   {tcdLName = name})    = [name]
493 tyClDeclNames (ForeignType {tcdLName = name})    = [name]
494
495 tyClDeclNames (ClassDecl {tcdLName = cls_name, tcdSigs = sigs, tcdATs = ats})
496   = cls_name : 
497     concatMap (tyClDeclNames . unLoc) ats ++ [n | L _ (TypeSig n _) <- sigs]
498
499 tyClDeclNames (TyData {tcdLName = tc_name, tcdCons = cons})
500   = tc_name : conDeclsNames (map unLoc cons)
501
502 tyClDeclTyVars (TyFunction  {tcdTyVars = tvs}) = tvs
503 tyClDeclTyVars (TySynonym   {tcdTyVars = tvs}) = tvs
504 tyClDeclTyVars (TyData      {tcdTyVars = tvs}) = tvs
505 tyClDeclTyVars (ClassDecl   {tcdTyVars = tvs}) = tvs
506 tyClDeclTyVars (ForeignType {})                = []
507 \end{code}
508
509 \begin{code}
510 countTyClDecls :: [TyClDecl name] -> (Int, Int, Int, Int, Int, Int)
511         -- class, synonym decls, type function signatures,
512         -- type function equations, data, newtype
513 countTyClDecls decls 
514  = (count isClassDecl     decls,
515     count isSynDecl       decls,
516     count isTFunDecl      decls,
517     count isTEqnDecl      decls,
518     count isDataTy        decls,
519     count isNewTy         decls) 
520  where
521    isDataTy TyData{tcdND=DataType} = True
522    isDataTy _                      = False
523    
524    isNewTy TyData{tcdND=NewType} = True
525    isNewTy _                     = False
526 \end{code}
527
528 \begin{code}
529 instance OutputableBndr name
530               => Outputable (TyClDecl name) where
531
532     ppr (ForeignType {tcdLName = ltycon})
533         = hsep [ptext SLIT("foreign import type dotnet"), ppr ltycon]
534
535     ppr (TyFunction {tcdLName = ltycon, tcdTyVars = tyvars, tcdIso = iso, 
536                      tcdKind = kind})
537       = typeMaybeIso <+> pp_decl_head [] ltycon tyvars Nothing <+> 
538         dcolon <+> pprKind kind
539         where
540           typeMaybeIso = if iso 
541                          then ptext SLIT("type family iso") 
542                          else ptext SLIT("type family")
543
544     ppr (TySynonym {tcdLName = ltycon, tcdTyVars = tyvars, tcdTyPats = typats,
545                     tcdSynRhs = mono_ty})
546       = hang (ptext SLIT("type") <+> 
547               (if isJust typats then ptext SLIT("instance") else empty) <+>
548               pp_decl_head [] ltycon tyvars typats <+> 
549               equals)
550              4 (ppr mono_ty)
551
552     ppr (TyData {tcdND = new_or_data, tcdCtxt = context, tcdLName = ltycon,
553                  tcdTyVars = tyvars, tcdTyPats = typats, tcdKindSig = mb_sig, 
554                  tcdCons = condecls, tcdDerivs = derivings})
555       = pp_tydecl (null condecls && isJust mb_sig) 
556                   (ppr new_or_data <+> 
557                    (if isJust typats then ptext SLIT("instance") else empty) <+>
558                    pp_decl_head (unLoc context) ltycon tyvars typats <+> 
559                    ppr_sig mb_sig)
560                   (pp_condecls condecls)
561                   derivings
562       where
563         ppr_sig Nothing = empty
564         ppr_sig (Just kind) = dcolon <+> pprKind kind
565
566     ppr (ClassDecl {tcdCtxt = context, tcdLName = lclas, tcdTyVars = tyvars, 
567                     tcdFDs = fds, 
568                     tcdSigs = sigs, tcdMeths = methods, tcdATs = ats})
569       | null sigs && null ats  -- No "where" part
570       = top_matter
571
572       | otherwise       -- Laid out
573       = sep [hsep [top_matter, ptext SLIT("where {")],
574              nest 4 (sep [ sep (map ppr_semi ats)
575                          , sep (map ppr_semi sigs)
576                          , pprLHsBinds methods
577                          , char '}'])]
578       where
579         top_matter    =     ptext SLIT("class") 
580                         <+> pp_decl_head (unLoc context) lclas tyvars Nothing
581                         <+> pprFundeps (map unLoc fds)
582         ppr_semi decl = ppr decl <> semi
583
584 pp_decl_head :: OutputableBndr name
585    => HsContext name
586    -> Located name
587    -> [LHsTyVarBndr name]
588    -> Maybe [LHsType name]
589    -> SDoc
590 pp_decl_head context thing tyvars Nothing       -- no explicit type patterns
591   = hsep [pprHsContext context, ppr thing, interppSP tyvars]
592 pp_decl_head context thing _      (Just typats) -- explicit type patterns
593   = hsep [ pprHsContext context, ppr thing
594          , hsep (map (pprParendHsType.unLoc) typats)]
595
596 pp_condecls cs@(L _ ConDecl{ con_res = ResTyGADT _ } : _) -- In GADT syntax
597   = hang (ptext SLIT("where")) 2 (vcat (map ppr cs))
598 pp_condecls cs                    -- In H98 syntax
599   = equals <+> sep (punctuate (ptext SLIT(" |")) (map ppr cs))
600
601 pp_tydecl True pp_head pp_decl_rhs derivings
602   = pp_head
603 pp_tydecl False pp_head pp_decl_rhs derivings
604   = hang pp_head 4 (sep [
605       pp_decl_rhs,
606       case derivings of
607         Nothing -> empty
608         Just ds -> hsep [ptext SLIT("deriving"), parens (interpp'SP ds)]
609     ])
610
611 instance Outputable NewOrData where
612   ppr NewType  = ptext SLIT("newtype")
613   ppr DataType = ptext SLIT("data")
614 \end{code}
615
616
617 %************************************************************************
618 %*                                                                      *
619 \subsection[ConDecl]{A data-constructor declaration}
620 %*                                                                      *
621 %************************************************************************
622
623 \begin{code}
624 type LConDecl name = Located (ConDecl name)
625
626 -- data T b = forall a. Eq a => MkT a b
627 --   MkT :: forall b a. Eq a => MkT a b
628
629 -- data T b where
630 --      MkT1 :: Int -> T Int
631
632 -- data T = Int `MkT` Int
633 --        | MkT2
634
635 -- data T a where
636 --      Int `MkT` Int :: T Int
637
638 data ConDecl name
639   = ConDecl
640     { con_name      :: Located name         -- Constructor name; this is used for the
641                                             -- DataCon itself, and for the user-callable wrapper Id
642
643     , con_explicit  :: HsExplicitForAll     -- Is there an user-written forall? (cf. HStypes.HsForAllTy)
644
645     , con_qvars     :: [LHsTyVarBndr name]  -- ResTyH98: the constructor's existential type variables
646                                             -- ResTyGADT:    all the constructor's quantified type variables
647
648     , con_cxt       :: LHsContext name      -- The context.  This *does not* include the
649                                             -- "stupid theta" which lives only in the TyData decl
650
651     , con_details   :: HsConDetails name (LBangType name)       -- The main payload
652
653     , con_res       :: ResType name         -- Result type of the constructor
654
655     , con_doc       :: Maybe (LHsDoc name)  -- A possible Haddock comment
656     }
657
658 data ResType name
659    = ResTyH98           -- Constructor was declared using Haskell 98 syntax
660    | ResTyGADT (LHsType name)   -- Constructor was declared using GADT-style syntax,
661                                 --      and here is its result type
662 \end{code}
663
664 \begin{code}
665 conDeclsNames :: Eq name => [ConDecl name] -> [Located name]
666   -- See tyClDeclNames for what this does
667   -- The function is boringly complicated because of the records
668   -- And since we only have equality, we have to be a little careful
669 conDeclsNames cons
670   = snd (foldl do_one ([], []) cons)
671   where
672     do_one (flds_seen, acc) (ConDecl { con_name = lname, con_details = RecCon flds })
673         = (map unLoc new_flds ++ flds_seen, lname : [f | f <- new_flds] ++ acc)
674         where
675           new_flds = [ f | (HsRecField f _ _) <- flds, not (unLoc f `elem` flds_seen) ]
676
677     do_one (flds_seen, acc) c
678         = (flds_seen, (con_name c):acc)
679
680 conDetailsTys details = map getBangType (hsConArgs details)
681 \end{code}
682   
683
684 \begin{code}
685 instance (OutputableBndr name) => Outputable (ConDecl name) where
686     ppr = pprConDecl
687
688 pprConDecl (ConDecl con expl tvs cxt details ResTyH98 doc)
689   = sep [ppr_mbDoc doc, pprHsForAll expl tvs cxt, ppr_details con details]
690   where
691     ppr_details con (InfixCon t1 t2) = hsep [ppr t1, pprHsVar con, ppr t2]
692     ppr_details con (PrefixCon tys)  = hsep (pprHsVar con : map ppr tys)
693     ppr_details con (RecCon fields)  = ppr con <+> ppr_fields fields
694
695 pprConDecl (ConDecl con expl tvs cxt (PrefixCon arg_tys) (ResTyGADT res_ty) _)
696   = ppr con <+> dcolon <+> 
697     sep [pprHsForAll expl tvs cxt, ppr (foldr mk_fun_ty res_ty arg_tys)]
698   where
699     mk_fun_ty a b = noLoc (HsFunTy a b)
700
701 pprConDecl (ConDecl con expl tvs cxt (RecCon fields) (ResTyGADT res_ty) _)
702   = sep [pprHsForAll expl tvs cxt, ppr con <+> ppr_fields fields <+> dcolon <+> ppr res_ty]
703
704 ppr_fields fields = braces (sep (punctuate comma (map ppr fields)))
705 \end{code}
706
707 %************************************************************************
708 %*                                                                      *
709 \subsection[InstDecl]{An instance declaration
710 %*                                                                      *
711 %************************************************************************
712
713 \begin{code}
714 type LInstDecl name = Located (InstDecl name)
715
716 data InstDecl name
717   = InstDecl    (LHsType name)  -- Context => Class Instance-type
718                                 -- Using a polytype means that the renamer conveniently
719                                 -- figures out the quantified type variables for us.
720                 (LHsBinds name)
721                 [LSig name]     -- User-supplied pragmatic info
722                 [LTyClDecl name]-- Associated types (ie, 'TyData' and
723                                 -- 'TySynonym' only)
724
725 instance (OutputableBndr name) => Outputable (InstDecl name) where
726
727     ppr (InstDecl inst_ty binds uprags ats)
728       = vcat [hsep [ptext SLIT("instance"), ppr inst_ty, ptext SLIT("where")],
729               nest 4 (ppr ats),
730               nest 4 (ppr uprags),
731               nest 4 (pprLHsBinds binds) ]
732
733 -- Extract the declarations of associated types from an instance
734 --
735 instDeclATs :: InstDecl name -> [LTyClDecl name]
736 instDeclATs (InstDecl _ _ _ ats) = ats
737 \end{code}
738
739 %************************************************************************
740 %*                                                                      *
741 \subsection[DerivDecl]{A stand-alone instance deriving declaration
742 %*                                                                      *
743 %************************************************************************
744
745 \begin{code}
746 type LDerivDecl name = Located (DerivDecl name)
747
748 data DerivDecl name
749   = DerivDecl (LHsType name) (Located name)
750
751 instance (OutputableBndr name) => Outputable (DerivDecl name) where
752     ppr (DerivDecl ty n) 
753         = hsep [ptext SLIT("deriving"), ppr ty, ptext SLIT("for"), ppr n]
754 \end{code}
755
756 %************************************************************************
757 %*                                                                      *
758 \subsection[DefaultDecl]{A @default@ declaration}
759 %*                                                                      *
760 %************************************************************************
761
762 There can only be one default declaration per module, but it is hard
763 for the parser to check that; we pass them all through in the abstract
764 syntax, and that restriction must be checked in the front end.
765
766 \begin{code}
767 type LDefaultDecl name = Located (DefaultDecl name)
768
769 data DefaultDecl name
770   = DefaultDecl [LHsType name]
771
772 instance (OutputableBndr name)
773               => Outputable (DefaultDecl name) where
774
775     ppr (DefaultDecl tys)
776       = ptext SLIT("default") <+> parens (interpp'SP tys)
777 \end{code}
778
779 %************************************************************************
780 %*                                                                      *
781 \subsection{Foreign function interface declaration}
782 %*                                                                      *
783 %************************************************************************
784
785 \begin{code}
786
787 -- foreign declarations are distinguished as to whether they define or use a
788 -- Haskell name
789 --
790 --  * the Boolean value indicates whether the pre-standard deprecated syntax
791 --   has been used
792 --
793 type LForeignDecl name = Located (ForeignDecl name)
794
795 data ForeignDecl name
796   = ForeignImport (Located name) (LHsType name) ForeignImport  -- defines name
797   | ForeignExport (Located name) (LHsType name) ForeignExport  -- uses name
798
799 -- Specification Of an imported external entity in dependence on the calling
800 -- convention 
801 --
802 data ForeignImport = -- import of a C entity
803                      --
804                      --  * the two strings specifying a header file or library
805                      --   may be empty, which indicates the absence of a
806                      --   header or object specification (both are not used
807                      --   in the case of `CWrapper' and when `CFunction'
808                      --   has a dynamic target)
809                      --
810                      --  * the calling convention is irrelevant for code
811                      --   generation in the case of `CLabel', but is needed
812                      --   for pretty printing 
813                      --
814                      --  * `Safety' is irrelevant for `CLabel' and `CWrapper'
815                      --
816                      CImport  CCallConv       -- ccall or stdcall
817                               Safety          -- safe or unsafe
818                               FastString      -- name of C header
819                               FastString      -- name of library object
820                               CImportSpec     -- details of the C entity
821
822                      -- import of a .NET function
823                      --
824                    | DNImport DNCallSpec
825
826 -- details of an external C entity
827 --
828 data CImportSpec = CLabel    CLabelString     -- import address of a C label
829                  | CFunction CCallTarget      -- static or dynamic function
830                  | CWrapper                   -- wrapper to expose closures
831                                               -- (former f.e.d.)
832
833 -- specification of an externally exported entity in dependence on the calling
834 -- convention
835 --
836 data ForeignExport = CExport  CExportSpec    -- contains the calling convention
837                    | DNExport                -- presently unused
838
839 -- abstract type imported from .NET
840 --
841 data FoType = DNType            -- In due course we'll add subtype stuff
842             deriving (Eq)       -- Used for equality instance for TyClDecl
843
844
845 -- pretty printing of foreign declarations
846 --
847
848 instance OutputableBndr name => Outputable (ForeignDecl name) where
849   ppr (ForeignImport n ty fimport) =
850     ptext SLIT("foreign import") <+> ppr fimport <+> 
851     ppr n <+> dcolon <+> ppr ty
852   ppr (ForeignExport n ty fexport) =
853     ptext SLIT("foreign export") <+> ppr fexport <+> 
854     ppr n <+> dcolon <+> ppr ty
855
856 instance Outputable ForeignImport where
857   ppr (DNImport                         spec) = 
858     ptext SLIT("dotnet") <+> ppr spec
859   ppr (CImport  cconv safety header lib spec) =
860     ppr cconv <+> ppr safety <+> 
861     char '"' <> pprCEntity header lib spec <> char '"'
862     where
863       pprCEntity header lib (CLabel lbl) = 
864         ptext SLIT("static") <+> ftext header <+> char '&' <>
865         pprLib lib <> ppr lbl
866       pprCEntity header lib (CFunction (StaticTarget lbl)) = 
867         ptext SLIT("static") <+> ftext header <+> char '&' <>
868         pprLib lib <> ppr lbl
869       pprCEntity header lib (CFunction (DynamicTarget)) = 
870         ptext SLIT("dynamic")
871       pprCEntity _      _   (CWrapper) = ptext SLIT("wrapper")
872       --
873       pprLib lib | nullFS lib = empty
874                  | otherwise  = char '[' <> ppr lib <> char ']'
875
876 instance Outputable ForeignExport where
877   ppr (CExport  (CExportStatic lbl cconv)) = 
878     ppr cconv <+> char '"' <> ppr lbl <> char '"'
879   ppr (DNExport                          ) = 
880     ptext SLIT("dotnet") <+> ptext SLIT("\"<unused>\"")
881
882 instance Outputable FoType where
883   ppr DNType = ptext SLIT("type dotnet")
884 \end{code}
885
886
887 %************************************************************************
888 %*                                                                      *
889 \subsection{Transformation rules}
890 %*                                                                      *
891 %************************************************************************
892
893 \begin{code}
894 type LRuleDecl name = Located (RuleDecl name)
895
896 data RuleDecl name
897   = HsRule                      -- Source rule
898         RuleName                -- Rule name
899         Activation
900         [RuleBndr name]         -- Forall'd vars; after typechecking this includes tyvars
901         (Located (HsExpr name)) -- LHS
902         NameSet                 -- Free-vars from the LHS
903         (Located (HsExpr name)) -- RHS
904         NameSet                 -- Free-vars from the RHS
905
906 data RuleBndr name
907   = RuleBndr (Located name)
908   | RuleBndrSig (Located name) (LHsType name)
909
910 collectRuleBndrSigTys :: [RuleBndr name] -> [LHsType name]
911 collectRuleBndrSigTys bndrs = [ty | RuleBndrSig _ ty <- bndrs]
912
913 instance OutputableBndr name => Outputable (RuleDecl name) where
914   ppr (HsRule name act ns lhs fv_lhs rhs fv_rhs)
915         = sep [text "{-# RULES" <+> doubleQuotes (ftext name) <+> ppr act,
916                nest 4 (pp_forall <+> pprExpr (unLoc lhs)), 
917                nest 4 (equals <+> pprExpr (unLoc rhs) <+> text "#-}") ]
918         where
919           pp_forall | null ns   = empty
920                     | otherwise = text "forall" <+> fsep (map ppr ns) <> dot
921
922 instance OutputableBndr name => Outputable (RuleBndr name) where
923    ppr (RuleBndr name) = ppr name
924    ppr (RuleBndrSig name ty) = ppr name <> dcolon <> ppr ty
925 \end{code}
926
927 %************************************************************************
928 %*                                                                      *
929 \subsection[DocDecl]{Document comments}
930 %*                                                                      *
931 %************************************************************************
932
933 \begin{code}
934
935 -- source code entities, for representing the module structure
936 data DocEntity name
937   = DeclEntity name
938   | DocEntity (DocDecl name)
939  
940 type LDocDecl name = Located (DocDecl name)
941
942 data DocDecl name
943   = DocCommentNext (HsDoc name)
944   | DocCommentPrev (HsDoc name)
945   | DocCommentNamed String (HsDoc name)
946   | DocGroup Int (HsDoc name)
947  
948 -- Okay, I need to reconstruct the document comments, but for now:
949 instance Outputable (DocDecl name) where
950   ppr _ = text "<document comment>"
951
952 docDeclDoc (DocCommentNext d) = d
953 docDeclDoc (DocCommentPrev d) = d
954 docDeclDoc (DocCommentNamed _ d) = d
955 docDeclDoc (DocGroup _ d) = d
956
957 \end{code}
958
959 %************************************************************************
960 %*                                                                      *
961 \subsection[DeprecDecl]{Deprecations}
962 %*                                                                      *
963 %************************************************************************
964
965 We use exported entities for things to deprecate.
966
967 \begin{code}
968 type LDeprecDecl name = Located (DeprecDecl name)
969
970 data DeprecDecl name = Deprecation name DeprecTxt
971
972 instance OutputableBndr name => Outputable (DeprecDecl name) where
973     ppr (Deprecation thing txt)
974       = hsep [text "{-# DEPRECATED", ppr thing, doubleQuotes (ppr txt), text "#-}"]
975 \end{code}