[Haskell-cafe] Syntax proposal for "reverse apply"/"pipeline apply" (flip ($))

Hans Höglund hans at hanshoglund.se
Thu Apr 17 18:03:34 UTC 2014


There is also is my humble attempt to standardize the (&) formulation: 

	http://hackage.haskell.org/package/reverse-apply

As you can see, these definitions now mirror those in 'lens' exactly. I see no reason why this definition should not move to base. IMHO, the Diagrams definition is a very specific one based on the needs of that EDSL, while the lens formulation is the expected one.

Mvh,
Hans


On 17 apr 2014, at 14:00, haskell-cafe-request at haskell.org wrote:

> Message: 1
> Date: Wed, 16 Apr 2014 16:49:31 -0700
> From: Dan Burton <danburton.email at gmail.com>
> To: Alexey Muranov <alexey.muranov at gmail.com>
> Cc: haskell-cafe <haskell-cafe at haskell.org>
> Subject: Re: [Haskell-cafe] Syntax proposal for "reverse
> 	apply"/"pipeline apply" (flip ($))
> Message-ID:
> 	<CALSygwf0wdBbrfQeED_raWjNfttYaX7pwDTzmBTTHaUqEkX5rg at mail.gmail.com>
> Content-Type: text/plain; charset="utf-8"
> 
> In the "lens" package, this is (&) at infixl 1. In the "diagrams" package,
> this is (#) at infixl 8. You're certainly not the first to want this, but
> nobody can ever agree what it should be called or what fixity it should
> have. You can always just define it yourself.
> 
> -- Dan Burton
> 
> 
> On Wed, Apr 16, 2014 at 3:25 PM, Alexey Muranov <alexey.muranov at gmail.com>wrote:
> 
>> Hello,
>> 
>> i am completely new to Haskell, but i am somewhat fascinated by
>> lambda-calculus and programming.
>> 
>> For whatever it is worth, i would like to propose for discussion a syntax
>> for "(flip ($))" operation in Haskell.
>> 
>> I think that a good syntax would be "|^", for example:
>> 
>>    square x = x * x
>>    y = 3 |^ square             -- y == 9
>> 
>> 
>> Explanation:
>> 
>> * i would have suggested just ^, but it would conflict with number
>> exponentiation,
>> 
>> * it is rather common in mathematics to write function application in
>> exponential notation:  x ^ f  instead of  f(x), especially if  f  is an
>> automorphism of some structure,
>> 
>> * (flip ($)) is exactly the exponentiation of Church numerals,
>> 
>> * in "The calculi of lambda-conversion", Alonzo Church uses the
>> "shorthand" notation "[N^M]" for "(MN)", where M and N are lambda-terms.
>> 
>> * I am probably not the only person missing the ability to apply functions
>> from the right:
>> 
>> http://stackoverflow.com/questions/1457140/haskell-composition-vs-fs-pipe-forward-operator
>> 
>> Well, other notations i've thought of are "\^" and "~$".
>> 
>> Alexey.
>> _______________________________________________
>> Haskell-Cafe mailing list
>> Haskell-Cafe at haskell.org
>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>> 
> -------------- next part --------------
> An HTML attachment was scrubbed...
> URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20140416/818eebe7/attachment-0001.html>
> 
> ------------------------------
> 
> Message: 2
> Date: Wed, 16 Apr 2014 16:56:37 -0700 (PDT)
> From: Alexey Muranov <alexey.muranov at gmail.com>
> To: haskell-cafe at googlegroups.com
> Cc: haskell-cafe <haskell-cafe at haskell.org>
> Subject: Re: [Haskell-cafe] Syntax proposal for "reverse
> 	apply"/"pipeline apply" (flip ($))
> Message-ID: <0569e94e-44b8-44a0-abe3-4bd7d80b2ed4 at googlegroups.com>
> Content-Type: text/plain; charset="utf-8"
> 
> On Thursday, April 17, 2014 1:49:31 AM UTC+2, Dan Burton wrote:
> 
>> In the "lens" package, this is (&) at infixl 1. In the "diagrams" package, 
>> this is (#) at infixl 8. You're certainly not the first to want this, but 
>> nobody can ever agree what it should be called or what fixity it should 
>> have. You can always just define it yourself.
>> 
> 
> (#) does not look too bad either. 
> -------------- next part --------------
> An HTML attachment was scrubbed...
> URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20140416/ccada62f/attachment-0001.html>
> 
> ------------------------------
> 
> Message: 3
> Date: Wed, 16 Apr 2014 18:41:01 -0700
> From: Dan Burton <danburton.email at gmail.com>
> To: Alexey Muranov <alexey.muranov at gmail.com>
> Cc: haskell-cafe <haskell-cafe at haskell.org>,
> 	haskell-cafe at googlegroups.com
> Subject: Re: [Haskell-cafe] Syntax proposal for "reverse
> 	apply"/"pipeline apply" (flip ($))
> Message-ID:
> 	<CALSygwdyxhNLafMZDm15iVzPO4qYytdC7q2fDRhabNWJ4Vrb=g at mail.gmail.com>
> Content-Type: text/plain; charset="utf-8"
> 
> Interesting. I've never seen it proposed as right-associative before. Just
> FYI, the implementation is as simple as this:
> 
> infixr 1 |^
> (|^) :: a -> (a -> b) -> b
> x |^ f = f x
> 
> Then you can write:
> 
> 3 |^ 2 |^ (^) -- produces 2^3 = 8
> 
> It seems very odd to me. I don't know why you'd want to apply the arguments
> backwards one by one. However, lens and diagrams both provide examples
> where you want to start with a value and apply functions "forwards" one by
> one, which is why their corresponding operators are left-associative.
> 
> -- Dan Burton

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20140417/497dfd1c/attachment-0001.html>


More information about the Haskell-Cafe mailing list