[Haskell-cafe] Re: Unary Minus
On Mon, 6 Apr 2009 12:13:09 +0200, Roel van Dijk wrote: >On Mon, Apr 6, 2009 at 12:04 PM, Benjamin L.Russell > wrote: >> Interesting. ?How is this hack implemented? > >This seems to be the relevant grammar: > lexp6 -> - exp7 > lpat6 -> - (integer | float)(negative literal) > >The '6's and the '7' are superscripts. >Perhaps the hack is in the precedence of the expression in which an >unary minus is allowed. What's interesting are the following definitions of the functions '-' (binary minus) and "negate" given in "8 Standard Prelude" (see http://www.haskell.org/onlinereport/standard-prelude.html#$tNum): >class (Eq a, Show a) => Num a where >(+), (-), (*):: a -> a -> a >negate :: a -> a >abs, signum :: a -> a >fromInteger :: Integer -> a > >-- Minimal complete definition: >-- All, except negate or (-) >x - y= x + negate y >negate x = 0 - x The type of "negate," "a -> a", where a is a Num, is precisely what is needed for a unary minus. -- Benjamin L. Russell -- Benjamin L. Russell / DekuDekuplex at Yahoo dot com http://dekudekuplex.wordpress.com/ Translator/Interpreter / Mobile: +011 81 80-3603-6725 "Furuike ya, kawazu tobikomu mizu no oto." -- Matsuo Basho^ ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Re: Unary Minus
On Mon, 6 Apr 2009 12:13:09 +0200, Roel van Dijk wrote: >On Mon, Apr 6, 2009 at 12:04 PM, Benjamin L.Russell > wrote: >> Interesting. ?How is this hack implemented? > >This seems to be the relevant grammar: > lexp6 -> - exp7 > lpat6 -> - (integer | float)(negative literal) > >The '6's and the '7' are superscripts. >Perhaps the hack is in the precedence of the expression in which an >unary minus is allowed. Yes, I see it now. It's under "9.5 Context-Free Syntax," instead of being under "9.2 Lexical Syntax," so it's a syntactic rule, rather than a lexical rule. According to the rule, "a left-expression of precedence level 6" consists of "'-' followed by an expression of precedence level 7", and "a left-pattern of precedence level 6" consists of "'-' followed by (an integer or a float)", and by definition, this is a "negative literal." Integers and floats, in turn, are part of the lexical syntax. -- Benjamin L. Russell -- Benjamin L. Russell / DekuDekuplex at Yahoo dot com http://dekudekuplex.wordpress.com/ Translator/Interpreter / Mobile: +011 81 80-3603-6725 "Furuike ya, kawazu tobikomu mizu no oto." -- Matsuo Basho^ ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Re: Unary Minus
On Mon, Apr 6, 2009 at 12:04 PM, Benjamin L.Russell wrote: > Interesting. How is this hack implemented? This seems to be the relevant grammar: lexp6 -> - exp7 lpat6 -> - (integer | float)(negative literal) The '6's and the '7' are superscripts. Perhaps the hack is in the precedence of the expression in which an unary minus is allowed. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Re: Unary Minus
Interesting. How is this hack implemented? I just checked the BNF grammar for the lexical syntax of Haskell in "The Haskell 98 Language Report" (see the BNF grammer given under "9.2 Lexical Syntax" under "9 Syntax Reference" at http://www.haskell.org/onlinereport/syntax-iso.html), but had difficulty in deriving a unary minus. Could somebody please enlighten me on how to derive the expression "-1" (a unary minus followed the the ascDigit 1) from the above-mentioned BNF grammar? Or is a unary minus not part of this grammar? -- Benjamin L. Russell On Mon, 6 Apr 2009 11:14:52 +0200, Lennart Augustsson wrote: >Unary minus is a hack in the syntax for allowing the function negate >to be written as prefix -. > >On Mon, Apr 6, 2009 at 10:36 AM, Martijn van Steenbergen > wrote: >> Paul Keir wrote: >>> >>> If I use :info (-) I get information on the binary minus. Is unary minus >>> also a function? >> >> No, as far as I know the unary minus is part of the number literals. You can >> use "negate" if you want it as a function. >> >> Hope this helps, >> >> Martijn. >> >> ___ >> Haskell-Cafe mailing list >> Haskell-Cafe@haskell.org >> http://www.haskell.org/mailman/listinfo/haskell-cafe >> -- Benjamin L. Russell / DekuDekuplex at Yahoo dot com http://dekudekuplex.wordpress.com/ Translator/Interpreter / Mobile: +011 81 80-3603-6725 "Furuike ya, kawazu tobikomu mizu no oto." -- Matsuo Basho^ ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe