Documentation design
Isaac Dupree
ml at isaac.cedarswampstudios.org
Sun Jul 5 23:45:31 EDT 2009
(for reference, here's the blog-post I wrote that inspired me to ask
this list for advice. I'll explain everything in this email anyway though.
http://haddock2009.wordpress.com/2009/06/23/how-to-navigate-your-code/
)
My challenge: getting to know an existing code-base quickly and easily,
so that I can hack on it. Haddock and HsColour are already pretty
helpful at this, but they could be more helpful. (haddock with
--ignore-all-exports, i.e. cabal haddock --internal, especially)
My dream situation: both haddock-pages and hscolour-pages would be
super-hyperlinked and super-readable. For example, haddock would list
all a module's definitions, not just its exports. In HsColoured source,
every identifier would link to its definition or the haddockumentation
of its definition. and so forth. It would be so much easier to generate
and browse this in HTML, than to get an IDE working, and it would be so
much more readable than a mere text-editor (even with syntax hilighting)
and quicker clicking on hyperlinks than grepping for everything.
Actually I don't have the resources to worry about designing any
HsColour stuff right now (its current design is mainly just a lexeme
highlighter). But, with your advices, I can design an improvement on
Haddock's ignore-exports mode, which currently has a few shortcomings:
1. you can't tell which identifiers in a module are exported
2. it doesn't document a module's re-exports at all
3. it still obeys {-# OPTIONS_HADDOCK hide #-} et al, even when they're
not appropriate for reading documentation of internals
4. 2+3 means that some things may be found nowhere in the documentation
at all! Not quite satisfying for something invoked by `cabal haddock
--internal`.
(Here's a haddock-generated page you can look at so you can figure out
the formatting-details I'll be describing:
http://www.haskell.org/ghc/docs/latest/html/libraries/base/Data-List.html
and its source code
http://www.haskell.org/ghc/docs/latest/html/libraries/base/src/Data-List.html
)
The ideal haddockumentation-formatting for this purpose isn't quite
obvious though. For example, sometimes you want to think about a module
in terms of its abstract interface, but sometimes you want to figure out
how it's implemented (without reverting completely to text based code
browsing). Maybe a compromise of some sort would be good. so...
Here's a proposal, for a new mode (`haddock --all-internal`?, to be
invoked by `cabal haddock --internal` rather than --internal's current
effect of ignore-all-exports) :
Files with no explicit export list can be treated as-is anyway.
For all files that have an explicit export list, generate the
synopsis-of-exports near the top, as usual. But have the index link,
generally, to where functions are originally defined (modulo being from
a non-internally-documented separate package, where it should link to
the appropriate place), and have the fuller documentation below be a
compilation of the identifiers *defined* in this module.
Actually that would need some revision because the sections and
subsections -- *, -- **, etc. defined in the export-list in the .hs,
actually are displayed
1. above the table of contents, linking to places in
2. the full list of definitions. Which might be defined in the module
in a different order than they're listed in the export list.
Why not add the sections into the synopsis? In this case, instead of
adding them to the main doc section. But hmm... in ordinary
non-internal documentation, would it be nice to *additionally* have the
sections marked in the synopsis (in addition to in the Contents and in
the main docs section)?
Maybe this mode should also abstain from "hiding" any module, because
that would cause missing docs. Etc.
Questions? Comments? Opinions? Does anyone want this feature, and/or not
think it's particularly useful?
-Isaac
More information about the Haddock
mailing list