On 17/03/07, Fawzi Mohamed <[EMAIL PROTECTED]> wrote:
* namespaces *

First off something that disturbed me but does not seem to be discussed
much are namespaces, or rather the lack of them.

I'm also in the middle of writing a medium-sized program in Haskell,
but my experiences have been somewhat the opposite; I've found that
although most people complain about the lack of namespaces I haven't
really missed them.

Yes I know that haskell does have namespaces, but with object oriented
languages you basically get a namespace for each class, in haskell you
need modules, and I often like to have groups of related types in the
same module.

Surely within a group of related types there'd be no overlapping names anyway?

Records then also put everything in the module namespace, and it seems
that this misfeature has already been discussed.

I like to prefix my record accessors with three letters that describe
the type. For example, in my forum software, the author of a post can
be pulled out of a Post value using pstAuthor. Although this is
somewhat low-tech, it's a solution that works well and makes reading
code easier, while of course solving the one-namespace problem. I
don't really see why anything more complex would be needed.

So I am wondering how people cope with them,  share your opinion,
for me the best thing seem to be to try to use one
module per "big" type, and then "import qualified x as y", what are
good coding practices?

A practice I've seen a lot in small- to mid-sized programs is to have
a Types module that contains definitions of the types used in the
program.

* vector & matrices *

A thing that bothered me a little was the absence of good standardized
vectors and matrices, for now I rolled my own 3x3, I have seen numerical
prelude, maybe in the future thre will be a standard interface for matrixes...
Rolling my own mattrixes/vectors I have hit against some limitations of
classes, nothing terrible, but not so nice, and something that I gather is
known for example the fact that you cannot overload + or (in haskell 98)
you cannot have overlapping instances.

Why not write up your module then send it off to the
[EMAIL PROTECTED] mailing list? If this has frustrated you then
it's probably frustrated others. Why not contribute something back and
polish this problem off?

And you can overload (+), just make your matrix type an instance of
Num. If some operations shouldn't be supported (like signum, perhaps),
the general strategy is just to use error (this is basically due to
the fact that Num has too many methods because we don't have a sane
way of splitting up type classes. Type class synonyms -- google for
them -- look like a good solution, but are lacking an implementation).

--
-David House, [EMAIL PROTECTED]
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to