@@ -27,6 +27,8 @@ data Docs = FunDoc FunDoc
2727 [FunDoc] -- data constructor docs
2828 | ClassDoc Name Docstring -- class docs
2929 [FunDoc] -- method docs
30+ [Name] -- parameter docs
31+ [PTerm] -- instances
3032 deriving Show
3133
3234showDoc d | nullDocstring d = empty
@@ -66,16 +68,35 @@ pprintFD imp (FD n doc args ty f)
6668 showArgs [] _ = []
6769
6870
69−
71+pprintDocs :: Bool -> Docs -> Doc OutputAnnotation
7072pprintDocs imp (FunDoc d) = pprintFD imp d
7173pprintDocs imp (DataDoc t args)
7274 = text "Data type" <+> pprintFD imp t <$>
7375 nest 4 (text "Constructors:" <> line <>
7476 vsep (map (pprintFD imp) args))
75−pprintDocs imp (ClassDoc n doc meths)
76− = text "Type class" <+> prettyName imp [] n <$> -- parameters?
77+pprintDocs imp (ClassDoc n doc meths params instances)
78+ = nest 4 (text "Type class" <+> prettyName imp [] n <>
79+ if nullDocstring doc then empty else line <> renderDocstring doc)
80+ <> line <$>
81+ nest 4 (text "Parameters:" <$>
82+ hsep (punctuate comma (map (prettyName False params') params)))
83+ <> line <$>
7784 nest 4 (text "Methods:" <$>
78− vsep (map (pprintFD imp) meths))
85+ vsep (map (pprintFD imp) meths))
86+ <$>
87+ nest 4 (text "Instances:" <$>
88+ let instances' = filter (not . hasConstraint) instances
89+ in vsep (if null instances' then [text "<no instances>"]
90+ else map dumpInstance instances'))
91+ where
92+ params' = zip params (repeat False)
93+
94+ dumpInstance :: PTerm -> Doc OutputAnnotation
95+ dumpInstance = pprintPTerm imp params' []
96+
97+ hasConstraint (PPi (Constraint _ _) _ _ _) = True
98+ hasConstraint (PPi _ _ _ pt) = hasConstraint pt
99+ hasConstraint _ = False
79100
80101getDocs :: Name -> Idris Docs
81102getDocs n
@@ -96,11 +117,14 @@ docData n ti
96117docClass :: Name -> ClassInfo -> Idris Docs
97118docClass n ci
98119 = do i <- getIState
120+ ctxt <- getContext
99121 let docstr = case lookupCtxt n (idris_docstrings i) of
100122 [str] -> fst str
101123 _ -> emptyDocstring
124+ params = class_params ci
125+ instances = map (delabTy i) (class_instances ci)
102126 mdocs <- mapM docFun (map fst (class_methods ci))
103− return (ClassDoc n docstr mdocs)
127+ return $ ClassDoc n docstr mdocs params instances
104128
105129docFun :: Name -> Idris FunDoc
106130docFun n