Positional cues or not
Jan Skibinski
jans@numeric-quest.com
Tue, 13 Feb 2001 05:58:49 -0500 (EST)
On Tue, 13 Feb 2001, Armin Groesslinger wrote:
> I guess tools will get confused by
>
>
> data A = A Int
>
> ---
> -- bla
> --
>
> type B = String
>
> ---
> -- blub
>
> newtype C = C Bool
>
>
> Is "bla" and "blub" in 'before' or 'after' position?
> I don't like restrictions like disallowing empty lines before/after
> the comments to help the tool find the right comments.
Right. The above examples indicate that not only
the tools but also the human beings will be confused by the
above sequence. You did not give a clue about the meaning
of the "bla" and "blub" and hence I am not any wiser
what they are referring to. Only when "blub" contextually
refers to either entity "B" or entity "C" can a human
reader make such association. But that proves the point
that your example has the low level of readability: any
additional time spent on sorting these things out in the
reader's mind is a waste of his time.
So this is not only a matter of "helping the tool find
the right comments" but also a matter of readability
of the sources. And that means that blank lines serve
their purpose too and should be used with great care.
No ambiguities arise when the comments are tightly
coupled with entities they describe - whether they
are before, after, or just at the beginning of the
entities they belong to.
By the way, I sometimes use "Jan's style" commenting
even for datatype definitions, especially when I
have something important to say there. This helps
with very tight binding of the two. And when I move
the things around the comments are not lost by some
accident.
newtype C
-- Some description ..
= C Bool
I suggest that both of your example comments "bla" and "blub"
should be treated as floating comments: either as the
decorations - which should be ignored alltogether, or
as some sort of headers that have some global important
meaning for the writer of the module. Look at the
Hugs Prelude for example. There are plenty of such
separators, grouping together the things that belong
to numbers, to lists, etc. They are usually the "one liners"
but on occasion you can also find a longer global
description, as in module Random.
Personally I use such separators to indicate categories
of functions, which is helpful when number of functions
in the module exceeds some readability level.
It helps to find the things and give extra meaning
to the things inside the category.
Those who viewed the samples I posted few days ago should
have the clear idea how it works. Currently the extractor
relies on an extra cue (at the moment it is --: Blah,
but I was reminded that this is illegal according to the
Report. Easy to change though).
Categories are helpful things, unless one uses submodules
instead. They exist in Smalltalk, Objective C, Eiffel.
ISE Eiffel goes even one step further and insists on
standard ctegory names all across their libraries.
But the usage of headers in Hugs' Prelude goes beyond
categories of functions; they also separate groups
of methods, or combinations of datatypes and the
functions, etc.
Should the documention standard respect the module
authors' wishes and provide at least some sort of support
for 'categories'? I think, it should.
Jan