Consistency of reserved operators and bang patterns

The bang pattern proposal [1] still allows (!) to be used as an operator. I think there should be no difference in this regard between ! and ~, since they are used in exactly the same location. In my opinion the best thing would be to allow (~) and (@) as operators. With the same restriction on definition as (!), i.e. they must be defined in function style, not as an operator. The change to the syntax would be to remove @ and ~ from the reserved operators list [2], reservedop -> .. | : | :: | = | \ | | | <- | -> | @ | ~ | => making it reservedop -> .. | : | :: | = | \ | | | <- | -> | => Oh, and while we are at it, I think (:) should also be removed as a reservedop, there is no reason for it to be on that list. Twan [1] Bang Patterns, Haskell-prime wiki http://hackage.haskell.org/trac/haskell-prime/wiki/BangPatterns [2] Haskell 98 report, lexical structure, identifiers and operators http://haskell.org/onlinereport/lexemes.html#sect2.4

Twan van Laarhoven wrote:
The bang pattern proposal [1] still allows (!) to be used as an operator. I think there should be no difference in this regard between ! and ~, since they are used in exactly the same location.
In my opinion the best thing would be to allow (~) and (@) as operators. With the same restriction on definition as (!), i.e. they must be defined in function style, not as an operator.
The change to the syntax would be to remove @ and ~ from the reserved operators list [2], reservedop -> .. | : | :: | = | \ | | | <- | -> | @ | ~ | => making it reservedop -> .. | : | :: | = | \ | | | <- | -> | =>
I agree - it confused me in the past that I couldn't define (@) or (~) operators. Bang-pattern syntax being active will still change the meaning of x ! y = z of course.
Oh, and while we are at it, I think (:) should also be removed as a reservedop, there is no reason for it to be on that list.
Backwards compatibility requires that it be implicitly imported from Prelude even in a module that does "import Prelude ( )" (although Hugs is already broken in this regard). And that makes it fairly useless as a non-reserved symbol. If not for that issue, I agree. Isaac

Isaac Dupree wrote:
Twan van Laarhoven wrote:
Oh, and while we are at it, I think (:) should also be removed as a reservedop, there is no reason for it to be on that list.
Backwards compatibility requires that it be implicitly imported from Prelude even in a module that does "import Prelude ( )" (although Hugs is already broken in this regard).
In particular, Haskell-98 bans import Prelude ( (:) )

Hi Re ! as an operator: This caused a number of complexities in the parsing of stuff, including shift-reduce conflicts. Someone would need to look into this, and determine that the rules are completely unambiguous.
Backwards compatibility requires that it be implicitly imported from Prelude even in a module that does "import Prelude ( )" (although Hugs is already broken in this regard).
In particular, Haskell-98 bans
import Prelude ( (:) )
Yhc does not meet this restriction either. Perhaps this is a change that is breaking but minor enough to be permitted for H', since everyone already does the reverse. Thanks Neil

On Fri, Sep 07, 2007 at 09:24:51PM -0300, Isaac Dupree wrote:
Oh, and while we are at it, I think (:) should also be removed as a reservedop, there is no reason for it to be on that list.
Backwards compatibility requires that it be implicitly imported from Prelude even in a module that does "import Prelude ( )" (although Hugs is already broken in this regard). And that makes it fairly useless as a non-reserved symbol. If not for that issue, I agree.
jhc is also broken in this regard. (:) is treated like any other constructor. John -- John Meacham - ⑆repetae.net⑆john⑈
participants (4)
-
Isaac Dupree
-
John Meacham
-
Neil Mitchell
-
Twan van Laarhoven