on master help sign in
Display docstrings for typeclass parameters and simplify dispaly of subclasses

The docstrings for the typeclass parameters do not actually show up yet because the structure is not populated.

commitf5705eb481031526fa1559b7b671f3e922c32ab2 authorPaul Koerbitz <paul.koerbitz@theppro.com> dateThu 1 May 2014, 15:57 (12 years ago) parentbb25a8b
1 file changed+22−16
src/Idris/Docs.hs+22−16
src/Idris/Docs.hs+22−16
@@ -27,7 +27,7 @@ data Docs = FunDoc FunDoc
2727 [FunDoc] -- data constructor docs
2828 | ClassDoc Name Docstring -- class docs
2929 [FunDoc] -- method docs
30− [Name] -- parameter docs
30+ [(Name, Maybe Docstring)] -- parameters and their docstrings
3131 [PTerm] -- instances
3232 deriving Show
3333
@@ -78,30 +78,37 @@ pprintDocs imp (ClassDoc n doc meths params instances)
7878 = nest 4 (text "Type class" <+> prettyName imp [] n <>
7979 if nullDocstring doc then empty else line <> renderDocstring doc)
8080 <> line <$>
81− nest 4 (text "Parameters:" <$>
82− hsep (punctuate comma (map (prettyName False params') params)))
81+ nest 4 (text "Parameters:" <$> prettyParameters)
8382 <> line <$>
8483 nest 4 (text "Methods:" <$>
8584 vsep (map (pprintFD imp) meths))
8685 <$>
87− nest 4 (text "Defined instances:" <$>
88− vsep (if null definedInstances then [text "<no instances>"]
89− else map dumpInstance definedInstances))
86+ nest 4 (text "Instances:" <$>
87+ vsep (if null instances' then [text "<no instances>"]
88+ else map dumpInstance instances'))
9089 <>
91− if null generatedInstances then empty
92− else line <$> nest 4 (text "Instances generated from subclasses:" <$>
93− vsep (map dumpInstance generatedInstances))
90+ if null subclasses then empty
91+ else line <$> nest 4 (text "Subclasses:" <$>
92+ vsep (map (dumpInstance . remConstraint) subclasses))
9493 where
95− params' = zip params (repeat False)
94+ params' = map (\x -> (fst x, False)) params
9695
9796 dumpInstance :: PTerm -> Doc OutputAnnotation
9897 dumpInstance = pprintPTerm imp params' []
9998
99+ remConstraint (PPi (Constraint _ _) _ tm _) = tm
100+ remConstraint (PPi x y z pt) = PPi x y z (remConstraint pt)
101+ remConstraint p = p
102+
100103 hasConstraint (PPi (Constraint _ _) _ _ _) = True
101104 hasConstraint (PPi _ _ _ pt) = hasConstraint pt
102105 hasConstraint _ = False
103106
104− (generatedInstances, definedInstances) = partition hasConstraint instances
107+ (subclasses, instances') = partition hasConstraint instances
108+
109+ prettyParameters = if any (isJust . snd) params
110+ then vsep (map (\(n,md) -> prettyName False params' n <+> maybe empty showDoc md) params)
111+ else hsep (punctuate comma (map (prettyName False params' . fst) params))
105112
106113getDocs :: Name -> Idris Docs
107114getDocs n
@@ -123,12 +130,11 @@ docClass :: Name -> ClassInfo -> Idris Docs
123130docClass n ci
124131 = do i <- getIState
125132 ctxt <- getContext
126− let docstr = case lookupCtxt n (idris_docstrings i) of
127− [str] -> fst str
128− _ -> emptyDocstring
129− params = class_params ci
133+ let docStrings = listToMaybe $ lookupCtxt n $ idris_docstrings i
134+ docstr = maybe emptyDocstring fst docStrings
135+ params = map (\pn -> (pn, docStrings >>= (lookup pn . snd))) (class_params ci)
130136 instances = map (delabTy i) (class_instances ci)
131− mdocs <- mapM docFun (map fst (class_methods ci))
137+ mdocs <- mapM (docFun .fst) (class_methods ci)
132138 return $ ClassDoc n docstr mdocs params instances
133139
134140docFun :: Name -> Idris FunDoc