I'm a strong +1 for accepting this proposal as it stands.

I'm decidedly lukewarm / a weak -1 on switching it to (|>). 

Another popular color of this bikeshed, (#) as is used in diagrams, interacts very poorly with MagicHash and has a very high precedence that ruins it for most dsl purposes.

We had it as (|>) in lens for a while and it didn't read well. It is often used in long compositions and the extra character adds up when chained several times.

-- >>> zipper ("hello","world") & down _1 & fromWithin traverse & focus .~ 'J' & rightmost & focus .~ 'y' & rezip
-- ("Jelly","world")

isoRules = defaultRules
  & handleSingletons .~ True
  & singletonRequired .~ True
  & singletonAndField .~ True

Both of those examples read much better with & than (|>). 

We had switched to % from (|>) to be consistent with the other (+=) (*=) operators where (%=) was being read as 'mod-equals' as a bit of a pun, and could be seen as the application of the % operator to the target. 

However this led to issues with a vocal minority who objected to it changing the meaning of 4 % 3 on lambdabot when combined with NumInstances.

We converted to (&) because of its incredible terseness and general lack of use across hackage. For DSL purposes, to me it is key that this operator be as succinct as possible and (&) is remarkably underutilized in haskell libraries today, due to the fact that (|) is taken by syntax, and our C-inspired brains tend to pair them.

-Edward

On Tue, Nov 20, 2012 at 1:27 PM, Michael Sloan <mgsloan@gmail.com> wrote:
And the results of the IRC discussion on lens: https://github.com/ekmett/lens/issues/100

I do think that this looks nicer, for whatever reason.  While the mnemonic of "mod"ulus can suggest modify once you know that, (&) somewhat naturally suggests "and then" ... "and then".  I still prefer (#) for overall consistency and history, but other than its conjunction connotations, (&) is mnemonically better.

It'll be funny to mix diagrams and lens code - (&) is used for sticking coordinates together for points / vectors - while (#) would stand in for (&).



On Tue, Nov 20, 2012 at 10:17 AM, Michael Sloan <mgsloan@gmail.com> wrote:
(#) is also used by the diagrams library, mainly for using functions as if they were "attributes".

In the context of lens, this is discussed a bit here: https://github.com/ekmett/lens/issues/17



On Tue, Nov 20, 2012 at 9:31 AM, Stephen Tetley <stephen.tetley@gmail.com> wrote:
"Haskell" called this operator (#) about 12 years ago - see Peter
Thiemann's WASH and Eric Meijer and colleagues MS Agent scripting.

I'd much prefer (#) if it didn't interfere with GHC's magic hash, I
suspect the above authors were using Hugs...

On 20 November 2012 17:19, Dan Burton <danburton.email@gmail.com> wrote:
> Just to bring up some prior art, from what I've heard, F# calls this |>.

_______________________________________________
Libraries mailing list
Libraries@haskell.org
http://www.haskell.org/mailman/listinfo/libraries



_______________________________________________
Libraries mailing list
Libraries@haskell.org
http://www.haskell.org/mailman/listinfo/libraries