Haskell infix syntax

KennyTM~ kennytm at gmail.com
Mon Mar 7 06:42:31 PST 2011


On Mar 7, 11 21:44, spir wrote:
> On 03/07/2011 02:05 PM, Jacob Carlborg wrote:
>> You could implement operator overloading without any special
>> cases/support in
>> the language, like Scala does. In Scala
>>
>> 3 + 4
>>
>> Is syntax sugar for:
>>
>> 3.+(4)
>>
>> It's possible because of the following three reasons:
>>
>> * Everything is an object
>> * Method names can contain other characters than A-Za-z_
>> * The infix syntax discussed in this thread
>>
>> Implementing operator overloading like this also allows you to add new
>> operators and not just overloading existing ones.
>
> We could give a standard name to each character in an allowed class, so
> that
> x !%# y
> maps to
> x.opBangPercentHash(y);
> ;-)

The current opBinary syntax already allows this ;)

Bar opBinary(string op:"!%#")(Foo y) const {
   ...
}

> Another solution is to specify operators in method defs:
> X opBangPercentHash as "!%#" (X y) {...}
> Or even use them directly there:
> X !%# (X y) {...}
> possibly with an annotation to warn the parser:
> @operator X !%# (X y) {...}
> In any case, /this/ is not a big deal to manage in symbol tables, since
> an operator is just a string like (any other) name. The big deal is to
> map such features to builtin types, I guess (which are not object types).
>

The big deal is it makes parsing more difficult (precedence and 
associativity need to be determined) with no significant benefit.

> Denis




More information about the Digitalmars-d mailing list