{-# OPTIONS -cpp #-} module PPModules where --import Modules import CheckModules (ModSysErr(..)) import TypedIds import HsIdentPretty import Ents as E import Relations import PrettyPrint instance Printable NameSpace where ppi ValueNames = ppi "Value" ppi ClassOrTypeNames = ppi "TypeOrClass" instance Printable i => Printable (IdTy i) where ppi (FieldOf x _) = "field of" <+> x ppi (MethodOf x _ _) = "method of" <+> x ppi (ConstrOf t tyinfo) = "con of" <+> tcon t -- <+> (constructors tyinfo) ppi (Class cnt ms) = "Class" <+> cnt <+> ms ppi (Type tyInfo) = "Type" <+> tyInfo ppi t = ppi (show t) instance Printable i => Printable (TypeInfo i) where ppi tyInfo = constructors tyInfo <+> fields tyInfo instance Printable i => Printable (ConInfo i) where ppi conInfo = con (conName conInfo) instance Printable (ModSysErr) where ppi x = case x of UndefinedModuleAlias m -> "Unknwon module alias" <+> "in export list" UndefinedExport a -> "Undefined export entry" <+> a UndefinedSubExport x a -> "Undefined subordinate" <+> a <+> "of" <+> x <+> "in export" AmbiguousExport a os -> "Ambiguous export entry" <+> a <> ':' <+> os MissingModule m -> "Import from missing module" <+> m UndefinedImport m n -> m <+> "does not export" <+> n UndefinedSubImport m x s -> m <+> "does not export subordinate" <+> s <+> "of" <+> x ppRel :: (Printable a, Printable b) => [(a,b)] -> Doc ppRel = vcat . map f where f (x,y) = ppi x <+> kw "|->" <+> ppi y instance (Show a, Show b, Printable a, Printable b) => Printable (Rel a b) where -- ppi (Rel r) = ppRel r ppi r = ppRel (relToList r) instance Printable n => Printable (Ent n) where ppi (E.Ent m n t) = hilite (m<>"."<>n)<>","<+>t where hilite = case t of ConstrOf{} -> con Type{} -> tcon Class{} -> tcon Assertion -> con Property -> con _ -> id showRel r = show (relToList r) readRel s = listToRel (read s) #if __GLASGOW_HASKELL__<604 instance (Show a, Show b) => Show (Rel a b) where show r = show (relToList r) #endif {- -- GHC 6.4 provides a Show instance but no Read instance. -- This Read instance doesn't match the provided Show instance for Set :-( instance (Ord a, Ord b, Read a, Read b) => Read (Rel a b) where readsPrec d s = [ (listToRel xs,a) | (xs,a) <- readsPrec d s ] -}