X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FhsSyn%2FHsDecls.lhs;h=9543cadfca61366620e0dc556e65ef7e7e71d594;hb=3ad8f84f6a75f240383e62a14472d14eb372dcd1;hp=2128ad399f4659c9eeb88d9c3a4cf59cf4c2c4ee;hpb=5537ba01a8cd93ea209ef67f3431d9f5f9cd9d34;p=ghc-hetmet.git diff --git a/compiler/hsSyn/HsDecls.lhs b/compiler/hsSyn/HsDecls.lhs index 2128ad3..9543cad 100644 --- a/compiler/hsSyn/HsDecls.lhs +++ b/compiler/hsSyn/HsDecls.lhs @@ -9,7 +9,7 @@ Definitions for: @TyDecl@ and @oCnDecl@, @ClassDecl@, \begin{code} module HsDecls ( HsDecl(..), LHsDecl, TyClDecl(..), LTyClDecl, - InstDecl(..), LInstDecl, NewOrData(..), + InstDecl(..), LInstDecl, DerivDecl(..), LDerivDecl, NewOrData(..), RuleDecl(..), LRuleDecl, RuleBndr(..), DefaultDecl(..), LDefaultDecl, SpliceDecl(..), ForeignDecl(..), LForeignDecl, ForeignImport(..), ForeignExport(..), @@ -67,6 +67,7 @@ type LHsDecl id = Located (HsDecl id) data HsDecl id = TyClD (TyClDecl id) | InstD (InstDecl id) + | DerivD (DerivDecl id) | ValD (HsBind id) | SigD (Sig id) | DefD (DefaultDecl id) @@ -95,6 +96,7 @@ data HsGroup id hs_valds :: HsValBinds id, hs_tyclds :: [LTyClDecl id], hs_instds :: [LInstDecl id], + hs_derivds :: [LDerivDecl id], hs_fixds :: [LFixitySig id], -- Snaffled out of both top-level fixity signatures, @@ -110,7 +112,7 @@ emptyGroup, emptyRdrGroup, emptyRnGroup :: HsGroup a emptyRdrGroup = emptyGroup { hs_valds = emptyValBindsIn } emptyRnGroup = emptyGroup { hs_valds = emptyValBindsOut } -emptyGroup = HsGroup { hs_tyclds = [], hs_instds = [], +emptyGroup = HsGroup { hs_tyclds = [], hs_instds = [], hs_derivds = [], hs_fixds = [], hs_defds = [], hs_fords = [], hs_depds = [], hs_ruleds = [], hs_valds = error "emptyGroup hs_valds: Can't happen" } @@ -121,6 +123,7 @@ appendGroups hs_valds = val_groups1, hs_tyclds = tyclds1, hs_instds = instds1, + hs_derivds = derivds1, hs_fixds = fixds1, hs_defds = defds1, hs_fords = fords1, @@ -130,6 +133,7 @@ appendGroups hs_valds = val_groups2, hs_tyclds = tyclds2, hs_instds = instds2, + hs_derivds = derivds2, hs_fixds = fixds2, hs_defds = defds2, hs_fords = fords2, @@ -140,6 +144,7 @@ appendGroups hs_valds = val_groups1 `plusHsValBinds` val_groups2, hs_tyclds = tyclds1 ++ tyclds2, hs_instds = instds1 ++ instds2, + hs_derivds = derivds1 ++ derivds2, hs_fixds = fixds1 ++ fixds2, hs_defds = defds1 ++ defds2, hs_fords = fords1 ++ fords2, @@ -153,6 +158,7 @@ instance OutputableBndr name => Outputable (HsDecl name) where ppr (ValD binds) = ppr binds ppr (DefD def) = ppr def ppr (InstD inst) = ppr inst + ppr (DerivD deriv) = ppr deriv ppr (ForD fd) = ppr fd ppr (SigD sd) = ppr sd ppr (RuleD rd) = ppr rd @@ -163,6 +169,7 @@ instance OutputableBndr name => Outputable (HsGroup name) where ppr (HsGroup { hs_valds = val_decls, hs_tyclds = tycl_decls, hs_instds = inst_decls, + hs_derivds = deriv_decls, hs_fixds = fix_decls, hs_depds = deprec_decls, hs_fords = foreign_decls, @@ -172,6 +179,7 @@ instance OutputableBndr name => Outputable (HsGroup name) where ppr_ds deprec_decls, ppr_ds rule_decls, ppr val_decls, ppr_ds tycl_decls, ppr_ds inst_decls, + ppr_ds deriv_decls, ppr_ds foreign_decls] where ppr_ds [] = empty @@ -715,6 +723,23 @@ instDeclATs (InstDecl _ _ _ ats) = ats %************************************************************************ %* * +\subsection[DerivDecl]{A stand-alone instance deriving declaration +%* * +%************************************************************************ + +\begin{code} +type LDerivDecl name = Located (DerivDecl name) + +data DerivDecl name + = DerivDecl (LHsType name) (Located name) + +instance (OutputableBndr name) => Outputable (DerivDecl name) where + ppr (DerivDecl ty n) + = hsep [ptext SLIT("deriving"), ppr ty, ptext SLIT("for"), ppr n] +\end{code} + +%************************************************************************ +%* * \subsection[DefaultDecl]{A @default@ declaration} %* * %************************************************************************