X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FhsSyn%2FHsDecls.lhs;h=8827f3ab64269240c623cda24af62b5541384be7;hb=34c8d0312071f7d0f4d221a997d3408c653ef9e5;hp=dc4bac71eebb3e231a268cd4dc3d663bb7615d99;hpb=241c6ba59c89d491aa4087f754dfcbbca26163f4;p=ghc-hetmet.git diff --git a/compiler/hsSyn/HsDecls.lhs b/compiler/hsSyn/HsDecls.lhs index dc4bac7..8827f3a 100644 --- a/compiler/hsSyn/HsDecls.lhs +++ b/compiler/hsSyn/HsDecls.lhs @@ -126,7 +126,12 @@ data HsDecl id data HsGroup id = HsGroup { hs_valds :: HsValBinds id, - hs_tyclds :: [LTyClDecl id], + + hs_tyclds :: [[LTyClDecl id]], + -- A list of mutually-recursive groups + -- Parser generates a singleton list; + -- renamer does dependency analysis + hs_instds :: [LInstDecl id], hs_derivds :: [LDerivDecl id], @@ -221,16 +226,27 @@ instance OutputableBndr name => Outputable (HsGroup name) where hs_fords = foreign_decls, hs_defds = default_decls, hs_ruleds = rule_decls }) - = vcat [ppr_ds fix_decls, ppr_ds default_decls, - ppr_ds deprec_decls, ppr_ds ann_decls, - ppr_ds rule_decls, - ppr val_decls, - ppr_ds tycl_decls, ppr_ds inst_decls, - ppr_ds deriv_decls, - ppr_ds foreign_decls] + = vcat_mb empty + [ppr_ds fix_decls, ppr_ds default_decls, + ppr_ds deprec_decls, ppr_ds ann_decls, + ppr_ds rule_decls, + if isEmptyValBinds val_decls + then Nothing + else Just (ppr val_decls), + ppr_ds (concat tycl_decls), + ppr_ds inst_decls, + ppr_ds deriv_decls, + ppr_ds foreign_decls] where - ppr_ds [] = empty - ppr_ds ds = blankLine $$ vcat (map ppr ds) + ppr_ds :: Outputable a => [a] -> Maybe SDoc + ppr_ds [] = Nothing + ppr_ds ds = Just (vcat (map ppr ds)) + + vcat_mb :: SDoc -> [Maybe SDoc] -> SDoc + -- Concatenate vertically with white-space between non-blanks + vcat_mb _ [] = empty + vcat_mb gap (Nothing : ds) = vcat_mb gap ds + vcat_mb gap (Just d : ds) = gap $$ d $$ vcat_mb blankLine ds data SpliceDecl id = SpliceDecl -- Top level splice @@ -627,6 +643,7 @@ instance OutputableBndr name top_matter = ptext (sLit "class") <+> pp_decl_head (unLoc context) lclas tyvars Nothing <+> pprFundeps (map unLoc fds) + ppr_semi :: Outputable a => a -> SDoc ppr_semi decl = ppr decl <> semi pp_decl_head :: OutputableBndr name @@ -886,7 +903,7 @@ data ForeignImport = -- import of a C entity -- * `Safety' is irrelevant for `CLabel' and `CWrapper' -- CImport CCallConv -- ccall or stdcall - Safety -- safe or unsafe + Safety -- interruptible, safe or unsafe FastString -- name of C header CImportSpec -- details of the C entity deriving (Data, Typeable)