One of the good things about Haskell 1.2's module system is that
it's `light', which suits a lazy programmer like me very well. If
you don't want to specify a function's type signature, or the names
exported from a module, or a module's interface file, you don't have
to. It's very easy and quick to, for example, split a module into
two using cut-and-paste: you just have to add a module line in one
file and a corresponding import in the other. (Pace mutual
recursion). I know you professional software engineers look down on
programmers like me(:-), but even so I think it's important that the
lightweight nature of modules and interfaces is preserved. It isn't
clear to me that Simon's proposal has that property.

A little anecdote for you. One of our new PhD students talked about
his undergraduate project yesterday, which consisted of implementing
the bottom few layers of X25 in both Erlang and Haskell --- a bit
over 1,000 lines of code in each case. After both versions were
complete he and his partner thought of an alternative approach, and
tried it out in the Erlang version. Making the change in the Haskell
version would have meant changing a large number of type signatures,
`and we didn't have time to do that'. Erlang is of course untyped.

I find that rather chilling.

John Hughes


Reply via email to