Wanted: warning option for usages of unary minus

Isaac Dupree isaacdupree at charter.net
Thu Apr 12 19:33:19 EDT 2007

Hash: SHA1


> For the purpose of warnings, I would explicitly keep track, for
> unqualified operator "-", whether it was followed by a digit (which is
> the unique and certain determiner that a numeric literal follows. Octal
> and hexadecimal start with 0c for some "c" and floating-point always
> starts with a decimal digit).  This would probably involve adding an
> argument isomorphic to Bool to the constructor "ITminus".  Then in
> compiler/parser/Lexer.x just before the @varsym rule (since alex is
> first maximal-munch, then top-to-bottom in the .x file, in matching
> choice), add rules
>   "-" / [0-9]     {  minus followed by number  }
>   "-"             {  minus not followed by number  }
> ( the [0-9] pattern could be refined perhaps... )
> Then this notation has to be carried on through the Parser.y, which
> shouldn't be too hard.
> For negative numeric literals, I think extra rules in the lexer would be
> added, '-' followed by the various numeric literal types (this seems a
> little repetitious, is there an easier way?).  The varieties of literals
> that were standard in the first place (i.e. non-unboxed) will get " / {
> extension is on }" qualifications to their patterns.  mkHsNegApp (in
> RdrHsSyn.lhs) will be simplified or removed, since we are moving towards
> a more sensible treatment of negative literals.  Another implementation
> choice could be to recognize the "minus followed by number" in the
> parser, but then it might be hard to distinguish between '98-syntax
> negate, subtraction, and negative unboxed literals, without ambiguity in
> the parser?

When the "new" syntax is switched on, assuming this includes removing
"-" as general prefix negate, ITminus would always be not followed by a
number (by design; those become single negative-number tokens).
Furthermore, we don't really want to treat "-" specially in this case.
So I guess the rule

>   "-"             {  minus not followed by number  }

should be more like
  "-" / { not "new" syntax }   {  minus not followed by number  }

, and the case that interprets "..", "=>", "->", etc. would have its "-"
case removed (whether "new" syntax or not).

The only this this "don't treat '-' specially in this case" might fall
afoul of is this proposed warning option:

> If a "-" isn't followed immediately by a numeric literal, the only
> thing to watch out for (and warn about) is the "forbidden section"
> (- 1), which could mean an actual section (\x -> x - 1) in the "new"
> syntax.

, if it proves difficult to detect at the appropriate point whether an
infix-operator was written as the unqualified "-".

Version: GnuPG v1.4.3 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org


More information about the Glasgow-haskell-users mailing list