content: module HsModulePretty where
  import HsModule
  import HsIdentPretty
  import PrettyPrint
  
  instance (Printable m,Printable i,Printable ds)
         => Printable (HsModuleI m i ds) where
      ppi (HsModule s mod exps imps ds) =
  	sep [kw "module" <+> modn mod,
  	     classNest $ sep [ maybepp ppiFTuple exps, kw "where" ]]
  	$$ layout (map ppi imps++map (blankline$) (ppis ds))
  
  	where vspace :: [Doc] -> Doc
  	      vspace [] = empty
  	      vspace ds = blankline $ vcat ds
  
  instance (Printable m,Printable i) => Printable (HsExportSpecI m i) where
      ppi (EntE e) = ppi e
      ppi (ModuleE m) = kw "module" <+> modn m
  
  instance (Printable m,Printable i) => Printable (HsImportDeclI m i) where
      ppi (HsImportDecl _ m qual m' imps) =
  	kw "import" <+> optpp qual (kw "qualified") <+> modn m <+>
          maybepp ((kw "as"<+>).modn) m' <+> maybepp ppImps imps
        where
          ppImps (hiding, imps) = optpp hiding (kw "hiding") <+> ppiFTuple imps
  
  instance Printable i => Printable (EntSpec i) where
      ppi (Var n)         = wrap n
      ppi (Abs n)         = tcon n -- could be a predicate in the P-logic ext
      ppi (AllSubs m)     = tcon m <> "(..)"
      ppi (ListSubs m ns) = tcon m <> ppiFTuple (map (ppcon wrap) ns)
  