Haskell infix syntax

KennyTM~ kennytm at gmail.com
Sun Mar 6 08:58:21 PST 2011


On Mar 7, 11 00:18, bearophile wrote:
> Haskell is full of function calls, so the Haskell designers have used/invented several different ways to avoid some parenthesys in the code.
>
>  From what I've seen if you remove some parenthesis well, in the right places, the resulting code is less noisy, more readable, and it has less chances to contain a bug (because syntax noise is a good place for bugs to hide).
>
> One of the ways used to remove some parenthesys is a standard syntax that's optionally usable on any dyadic function (function with two arguments):
>
> sum a b = a + b
>
> sum 1 5 == 1 `sum` 5
>
> The `name` syntax is just a different way to call a regular function with two arguments.
>
> In Haskell there is also a way to assign an arbitrary precedence and associativity to such infix operators, but some Haskell programmers argue that too much syntax sugar gives troubles ( http://www.haskell.org/haskellwiki/Use_of_infix_operators ).
>
> In D the back tick has a different meaning, and even if in D you use a different syntax, like just a $ prefix, I don't know how much good this syntax is for D:
>
> int sum(int x, int y) { return x + y; }
>
> int s = sum(1, sum(5, sum(6, sum(10, 30))));
> Equals to (associativity of $ is fixed like this):
> int s = 1 $sum 5 $sum 6 $sum 10 $sum 30;
>
> So I think it's not worth adding to D.
>
> Bye,
> bearophile

If we had UFCS this could be written as,

     int s = 1.sum(5.sum(6.sum(10.sum(30))));

or, knowing sum is associative,

     int s = 1.sum(5).sum(6).sum(10).sum(30);



More information about the Digitalmars-d mailing list