the dreaded offside rule
Doaitse Swierstra
doaitse at cs.uu.nl
Wed Mar 8 16:27:48 EST 2006
It is with some hesitation that I want to bring up another point, in
which Haskell' could be an improvement above Haskell: the offside rule.
Although I manage to live with it, I encountered many problems with
it in the past:
1) it is impossible to explain the precise workings of the rule to
a class of first years undergraduates
This is extremely demotivating. I do not want to teach using
the following utterances: "If you write your programs in the same
style as I do on my slides, you will usually get away with it".
Students are perfectly happy to accept that complicated things are
complicated, but are not very willing to buy complicated explanations
for things which ought to be simple. I furthermore think it is waist
of time to to have to go into this in my lectures. I do not think the
alternative, in which you always have to write { ; ; } is an option.
A language in which every let is followed by a { is plain stupid;
just like in Pascal, where each procedure, function, const, var and
begin keyword has to be preceded by a (thus superfluous) semicolon.
2) it has created havoc among students for years, with Hugs
complaining about improper semicolons, whereas
the student has not typed a single semicolon in his program.
many students think Haskell is a complicated language,
mainly because of offside rules, (and the monomorphism
restriction of course)
3) it is formulated in an implementation oriented way, prohibiting
proper tool support for parser generation
With our parser combinator library we have created very
efficient error-correcting parsers (far more efficient that Parsec
based ones) for quite a few languages (including Haskell). Creating
one for Haskell however became a nightmare, although we have managed
to encapsulate the problem in a special offside parser combinator.
Our parsers perform error-correction automatically, and this is
simply not compatible with a prescription in the language definition
as to how certain parse errors should be dealt with (especially that
they are not errors). We had to put parser-brain-surgery into place
in order to cope with the description of the offside rule. Although
the problem is solved by the introduction of the offside combinator
now, I think it is a sign of unhealthiness of the formulation, which
is too implementation dependent.
4) based on many examples my claim is that almost no Haskell
programmer can always correctly apply to offside rule
We might go back to something simpler, like e.g. the Miranda(tm)
rule, in which declarations have to start in the same column, and a
declaration extends to the lower right of its first character.
Doaitse Swierstra
More information about the Haskell-prime
mailing list