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