
On 07/01/2013 02:03 PM, Marc Gorenstein wrote:
Hi Brandon, Darren, and Michael,
Thanks for you responses, but I'm still confused.
Here are two examples of operator sections. The first takes the infix operator / and turns it into a prefix operator.
Prelude> let eight_div_by = ((/) 8 ) Prelude> eight_div_by 4 2.0
I get that. But look at the following: We now have a prefix operator with the input on the "wrong" side.
Prelude> let div_by_eight = ( / 8 ) Prelude> div_by_eight 4 0.5
Why should ( / 8) 4 = 0.5?
This isn't a normal Haskell function application, it's a special case (Brandon pointed at the place in the spec where it's defined.) It does a trick, transforming (/ 8) into "flip (/) 8" so that the argument will wind up in the right place. You've got the 8 on the right-hand side of the division operator, and that's where it stays. It only works for binary operators, since they have a left-hand argument and a right-hand argument. (4 /) will return a function, "four divided by something," and (/ 8) will return a function, "something divided by 8." In both cases, the 4 or the 8 stay on the same side of the division operator. But there's a hidden transformation happening to get the other argument in the right spot.