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